一个server 2个客户端 A 发送的数据到server 后 zerver怎么给B最好给段代码写过run函数 一个菜鸟的问题 随便什么流 TCP协议的套接字那种
------解决方案--------------------
一般server段用多线程来实现。
这是我写的客户端,通过telnet连接服务器的,希望对你有帮助
- Java code
import java.io.*;import java.net.*; public class Client { Socket socket; BufferedReader in; PrintWriter out; boolean isQuit; public Client() { try { System.out.println("Try to Connect to 127.0.0.1:23"); socket = new Socket("10.144.205.98",23); }catch(Exception e){ System.out.println("wrong"); } isQuit = false; } public void send(){ SendThread sd = new SendThread(this); new Thread(sd).start(); } public void server(){ ServerThread st = new ServerThread(this); new Thread(st).start(); } public void over(){ try{ out.close(); in.close(); socket.close(); }catch(Exception e) { System.out.println("Wrong"); } } public Socket getSocket(){return socket;} public boolean isQuit() {return isQuit;} public void quit(boolean b){isQuit = b;} public static void main(String[] args) throws Exception{ Client c1 = new Client(); c1.server(); Thread.sleep(1000); c1.send(); }} class ServerThread implements Runnable{ Client cl; public ServerThread(Client cl){this.cl = cl;} public void run(){ BufferedReader in; Socket socket = cl.getSocket(); while(true){ if(cl.isQuit()){return;} try { in = new BufferedReader(new InputStreamReader(socket.getInputStream())); char[] buffer = new char[1024*1024*5]; String lineStr = ""; /*while((lineStr = in.readLine()) != null){ System.out.println(lineStr); }*/ int len = in.read(buffer,0,buffer.length); System.out.print(new String(buffer,0,len)); }catch(IOException e) { System.out.println("ServerThread Wrong"); e.printStackTrace(); return; } } }}class SendThread implements Runnable{ Client cl; public SendThread(Client cl){this.cl = cl;} public void run(){ PrintWriter out; Socket socket = cl.getSocket(); while(true){ try { out = new PrintWriter(socket.getOutputStream(),true); BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); String tmp = line.readLine(); if(tmp.equals("quit")){ cl.quit(true); return; } out.println(tmp); }catch(IOException e) { System.out.println("SendThread Wrong"); } } }}