以下代码只能实现一个Server和一个Client之间的通信。
不能实现两个Client之间的通信,如何实现?
再就是目前的通信是Server发送一句,Client接收再发一句,Server和Client都不能连续发送和连续接收?
如何实现可以可重复的发送和接收呢?
另外以下代码一定还有问题,请给指正。谢谢!
- Java code
import java.io.*;import java.net.*;class TServer extends Thread{ Socket s; public TServer(Socket s){ this.s = s; } public void run() { sendMsg(s); getMsg(s); } public static void main(String [] args) throws Exception{ ServerSocket server = new ServerSocket(8888); while(true) { Socket s = server.accept(); TServer ts = new TServer(s); ts.start(); } } public static void sendMsg(Socket s){ System.out.println("请输入发送给客户端的信息:"); String line=null; BufferedReader br=null; OutputStream os =null; try{ br = new BufferedReader(new InputStreamReader(System.in)); line = br.readLine(); }catch(Exception e){ e.printStackTrace(); } try{ os = s.getOutputStream(); os.write(line.getBytes()); }catch(Exception e){ e.printStackTrace(); } } public static void getMsg(Socket s){ System.out.println("正在获取客户端的信息,请待........"); InputStream is =null; try{ is = s.getInputStream(); byte [] buf = new byte [1024]; int len = is.read(buf); System.out.println(new String(buf,0,len)); }catch(Exception e){ e.printStackTrace(); } }}import java.io.*;import java.net.*;class TClient extends Thread{ public static void main(String [] args) throws Exception{ Socket s = new Socket("127.0.0.1",8888); getMsg(s); sendMsg(s); } public static void sendMsg(Socket s){ System.out.println("请输入发送给服务器的信息:"); String line=null; BufferedReader br=null; OutputStream os =null; try{ br = new BufferedReader(new InputStreamReader(System.in)); line = br.readLine(); }catch(Exception e){ e.printStackTrace(); } try{ os = s.getOutputStream(); os.write(line.getBytes()); }catch(Exception e){ e.printStackTrace(); } } public static void getMsg(Socket s){ System.out.println("正在获取服务器信息,请待........"); InputStream is =null; try{ is = s.getInputStream(); byte [] buf = new byte [1024]; int len = is.read(buf); System.out.println(new String(buf,0,len)); }catch(Exception e){ e.printStackTrace(); } } }
------解决方案--------------------
两个Client之间的通信,要么用Server中转,要么两边都实现Server。
连续发送和连续接收,多起个线程扫输入流即可以实现。
网络这块看过些代码,自己也没动过手……
mark一下,等大虾。
------解决方案--------------------
连续发送就是发完一句再发一句,为什么要等服务器应答,你的代码写成
- Java code
getMsg(s); sendMsg(s);
------解决方案--------------------
必须使用非阻塞通讯 ,去看看 java.nio 这个包的内容把。jdk的javadoc中有说明的。
------解决方案--------------------
1、多线程
2、异步
------解决方案--------------------