日期:2014-05-20  浏览次数:20721 次

Java如何实现两个Client也能进行通信
以下代码只能实现一个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、异步
------解决方案--------------------
探讨
两个Client之间的通信,要么用Server中转,要么两边都实现Server。
连续发送和连续接收,多起个线程扫输入流即可以实现。