当前位置:编程学习 > JAVA >>

java socket 编程经典实例

服务器监听、并接收每个客户端的信息再群发到每个客户端
服务端
[java]  
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;  
    }  
  
}  
 
[java]  
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();  
        }  
          
    }  
  
}  
 
客户端
[java] 
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();  
        }  
  
    }  
  
}  
 
[java] 
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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,