• java socket 编程经典实例


    服务器监听、并接收每个客户端的信息再群发到每个客户端

    服务端

    package com.java.xiong.Net17;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.Socket;
    
    public class RunableSocket implements Runnable {
    	// 定义当前线程处理的Socket
    	private Socket socket = null;
    	// 该线程对用的输入流
    	private BufferedReader read = null;
    
    	public RunableSocket(Socket s) throws IOException {
    		this.socket = s;
    		read = new BufferedReader(
    				new InputStreamReader(socket.getInputStream()));
    	}
    
    	@Override
    	public void run() {
    		String line=null;
    		try{
    			while((line=getClentData())!=null){
    				for(Socket s:MyServer.list){
    					//向每个客户端输出信息
    					PrintStream print=new PrintStream(s.getOutputStream());
    					print.println(line);
    				}
    			}
    			
    		}catch(IOException  io){
    			io.printStackTrace();
    		}
    
    	}
    	//读取客户端数据的方法
    	public String getClentData(){
    		String line=null;
    		try{
    			line=read.readLine();
    		}catch(IOException io){
    			MyServer.list.remove(socket);
    		}
    		return line;
    	}
    
    }
    


    package com.java.xiong.Net17;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MyServer {
    	
    	public static List<Socket> list=new ArrayList<Socket>();
    	
    	public static void main(String [] args) throws Exception{
    		ServerSocket  server=new ServerSocket(30001);
    		while(true){
    			Socket scoket=server.accept();
    			list.add(scoket);
    			new Thread(new RunableSocket(scoket)).start();
    		}
    		
    	}
    
    }
    

    客户端

    package com.java.xiong.Net17;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.Socket;
    
    //将服务器返回的数据打印出来
    public class RubableClient implements Runnable {
    
    	private Socket socket;
    	private BufferedReader read;
    
    	public RubableClient(Socket socket) throws IOException {
    		this.socket = socket;
    		this.read = new BufferedReader(new InputStreamReader(
    				this.socket.getInputStream()));
    	}
    
    	@Override
    	public void run() {
    		try{
    			String line=null;
    			while((line=read.readLine())!=null){
    				System.out.print(line);
    			}
    			
    		}catch(IOException  io){
    			io.printStackTrace();
    		}
    
    	}
    
    }
    
    package com.java.xiong.Net17;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class MyClient {
    
    	public static void main(String[] args) throws Exception, IOException {
    
    		//向服务器发送请求
    		Socket socket = new Socket("127.0.0.1", 30001);
    		new Thread(new RubableClient(socket)).start();
    		//获取输出流
    		PrintStream print = new PrintStream(socket.getOutputStream());
    		String line = "";
    		BufferedReader read = new BufferedReader(new InputStreamReader(
    				System.in));
    		while((line=read.readLine())!=null){
    			//写入Socket对应的输出流
    			print.println(line);
    		}
    	}
    
    }
    



  • 相关阅读:
    Java抽象类、接口能否有构造方法
    Java堆溢出、栈溢出示例
    typora常用快捷键
    什么是业务逻辑
    解决idea登录github出现的invalid authentication data 404 not found
    SQL常用聚合函数
    oracle存储过程/函数调试
    解决IDEA全局搜索Ctrl+Shift+F失效问题
    如何在win10系统中使用Linux命令
    Java复现NullPointerException异常
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3400152.html
Copyright © 2020-2023  润新知