当前位置: 代码迷 >> J2SE >> Java怎么实现两个Client也能进行通信
  详细解决方案

Java怎么实现两个Client也能进行通信

热度:310   发布时间:2016-04-24 01:35:12.0
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。
连续发送和连续接收,多起个线程扫输入流即可以实现。
  相关解决方案