[置顶] 一个比较成熟的Socket实例
废话不多说...直接看代码
服务器端...
Server.java
package test; import java.net.ServerSocket; import java.net.Socket; public class Server { public static ServerSocket ss; int i=10000; public Server(){ try { System.out.println("监听端口:"+i); ss = new ServerSocket(i); Socket socket = ss.accept(); Socket_List.setSocket(i, socket); System.out.println("在端口 "+i+" 有新连接:"+Socket_List.getSocket(i).getRemoteSocketAddress()); new Thread(new getMessage(i)).start(); } catch (Exception e) { System.out.println("连接客户端异常"+e.getMessage()); } } public static void main(String[] args) { new Server(); } }Socket_list.java
package test; import java.net.Socket; import java.util.HashMap; import java.util.Map; public class Socket_List { private static Map<Integer, Socket> map= new HashMap<Integer, Socket>(); private static Socket_List list; public static Socket_List getThis() { if(list==null) list= new Socket_List(); return list; } public static Socket getSocket(int i) { return map.get(i); } public static void setSocket(int i,Socket socket) { map.put(i, socket); } }
getMessage.java
package test; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; public class getMessage implements Runnable{ private int i=0; public static String getMessages(int id) throws Exception { BufferedReader reader=new BufferedReader(new InputStreamReader(Socket_List.getSocket(id).getInputStream())); return reader.readLine(); } public static void sendMessages(int id,String message) throws Exception { PrintWriter send=new PrintWriter(Socket_List.getSocket(id).getOutputStream()); send.println(message); send.flush(); } public getMessage(int i) { this.i=i; } @Override public void run() { try { while(true) { String Message=getMessages(i); System.out.println("来自"+Socket_List.getSocket(i).getRemoteSocketAddress()+"的信息:"+Message); sendMessages(i, Message); System.out.println("向客户端发送信息:"+Message); } } catch (Exception e) { try { System.out.println("客户端"+Socket_List.getSocket(i).getRemoteSocketAddress()+"断开连接~!"); Socket_List.getSocket(i).close(); Server.ss.close(); new Server(); } catch (Exception e1) { System.out.println("未能正常关闭Socket!~"); } } } }
客户端
Client.java
package test; import java.net.Socket; public class Client { int i=10000; public Client(){ try { Socket client=new Socket("127.0.0.1",i); System.out.println("已连接"+i); new Thread(new ClientgetMessage(client)).start(); } catch (Exception e) { System.out.println("未能连接到服务器"+e.getMessage()); } } public static void main(String[] args) { new Client(); } }
ClientgetMessage.java
package test; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class ClientgetMessage implements Runnable{ private Socket socket; public ClientgetMessage(Socket socket) { this.socket=socket; } public void run() { new Thread(new getMessages(socket)).start(); new Thread(new sendMessages(socket)).start(); } } class getMessages implements Runnable { private Socket socket; getMessages(Socket socket) { this.socket=socket; } public void run() { try { while(true) { BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); String Message=reader.readLine(); System.out.println("来自"+socket.getRemoteSocketAddress()+"的信息:"+Message); } } catch (Exception e) { try { System.out.println("服务器"+socket.getRemoteSocketAddress()+"断开连接~!"); socket.close(); new Client(); System.exit(0); } catch (Exception e1) { System.out.println("未能正常关闭Socket!~"); } } } } class sendMessages implements Runnable { private Socket socket; sendMessages(Socket socket) { this.socket=socket; } public void run() { try { while(true) { PrintWriter send=new PrintWriter(socket.getOutputStream()); BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); send.println(reader.readLine()); send.flush(); } } catch (Exception e) { System.out.println("发送消息失败"); } } }
-----------------------------------程序员 闫帆原创---------------------------------------
转载请注明原创人信息 程序员 闫帆yanfanvip