本帖最后由 Computer001 于 2011-03-22 13:59:39 编辑

解决方案 »

  1.   

    两个Client之间的通信,要么用Server中转,要么两边都实现Server。
    连续发送和连续接收,多起个线程扫输入流即可以实现。网络这块看过些代码,自己也没动过手……
    一下,等大虾。
      

  2.   

    连续发送就是发完一句再发一句,为什么要等服务器应答,你的代码写成          getMsg(s);
            sendMsg(s);当然是收一条,发一条了。
      

  3.   

    必须使用非阻塞通讯 ,去看看 java.nio 这个包的内容把。jdk的javadoc中有说明的。
      

  4.   

    不能实现两个Client之间的通信,如何实现?无法实现,必须有 Server再就是目前的通信是Server发送一句,Client接收再发一句,Server和Client都不能连续发送和连续接收?因为你用的是同步方式,Server 在接收到 Client 连接时,使用线程另外去处理就不会有这种情况了。如何实现可以可重复的发送和接收呢?

    那需要自己定义一个协议,在消息前加 2 个字节(short 数值,或者 4 个字节的 int)用于标识后面的消息有多长。首先读取这 2 个字节,这样的话就知道消息有多少了。就不会把连续发过来的消息都当作是一条消息了。
      

  5.   

    通过SERVER中转,Client用While(true)一直等待接收服务器中转的信息即可。
      

  6.   

    用UDP吧,可以任意两个CLIENT相互通信,只要知道IP和端口
      

  7.   

    通过使用线程的方法把前1 3 4 的问题解决了。现在就是不能 两个Client进行通信了.代码如下:
    import java.io.*;
    import java.net.*;
    class TServer extends Thread{
    Socket s;
    public TServer(Socket s){
    this.s = s;
    }
    public void run() {
    //new SSend(s).start();
    new SResever(s).start();

    }
    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();
    }
    }
    }
    class SSend extends Thread {
    Socket s;
    public SSend(Socket s){
    this.s = s;
    }
    public  void run(){
    while(true)
    {
    String flag = sendMsg(s);
    if(flag.equals("quit")){
    System.out.println("会话结束!");
    new SResever(s).start();
    break;
    }else if(flag.equals("exit")){
    System.exit(-1);
    }
    }
    }

    public static String sendMsg(Socket s){
    System.out.println("请输入发送给客户端的信息:\n");
    String inputMsg=null;
    BufferedReader br=null;
    OutputStream os =null;
    try{
    br = new BufferedReader(new InputStreamReader(System.in));
    inputMsg = br.readLine();
    }catch(Exception e){
    e.printStackTrace();
    }
    try{
    os = s.getOutputStream();
    os.write(inputMsg.getBytes());
    }catch(Exception e){
    e.printStackTrace();
    }
    return inputMsg;
    }
    }class SResever extends Thread{
    Socket s;
    public SResever(Socket s){
    this.s = s;
    }
    public void run(){
    while(true)
    {
    String flag = getMsg(s);
    if(flag.equals("quit")){
    System.out.println("会话结束!");
    new SSend(s).start();
    break;
    }else if(flag.equals("exit")){
    System.exit(-1);
    }
    }
    }
    public static String getMsg(Socket s){
    String Ip = s.getInetAddress().toString();
    System.out.println("正在获取客户端的信息,请待........\n");
    InputStream is =null;
    String reMsg =null;
    try{
    is = s.getInputStream();
    byte [] buf = new byte [1024];
    int len = is.read(buf);
    reMsg = new String(buf,0,len);
    System.out.println(Ip+":" + reMsg);
    }catch(Exception e){
    e.printStackTrace();
    }
    return reMsg;
    }
    }
    import java.io.*;
    import java.net.*;
    import java.util.*;
    class TClient {
    public static void main(String [] args) throws Exception{
    Socket s = new Socket("127.0.0.1",8888);
    new CSend(s).start();
    }
    }class CSend extends Thread {
    Socket s;
    public CSend(Socket s){
    this.s = s;
    }
    public  void run(){
    while(true)
    {
    String flag = sendMsg(s);
    if(flag.equals("quit")){
    System.out.println("会话结束!");
    new SResever(s).start();
    break;
    }else if(flag.equals("exit")){
    System.exit(-1);
    }
    }
    }

    public static String sendMsg(Socket s){
    System.out.println("请输入发送给客户端的信息:\n");
    String inputMsg=null;
    BufferedReader br=null;
    OutputStream os =null;
    try{
    br = new BufferedReader(new InputStreamReader(System.in));
    inputMsg = br.readLine();
    }catch(Exception e){
    e.printStackTrace();
    }
    try{
    os = s.getOutputStream();
    os.write(inputMsg.getBytes());
    }catch(Exception e){
    e.printStackTrace();
    }
    return inputMsg;
    }
    }class SResever extends Thread{
    Socket s;
    public SResever(Socket s){
    this.s = s;
    }
    public void run(){
    while(true)
    {
    String flag = getMsg(s);
    if(flag.equals("quit")){
    System.out.println("会话结束!");
    new CSend(s).start();
    break;
    }else if(flag.equals("exit")){
    System.exit(-1);
    }
    }
    }
    public static String getMsg(Socket s){
    String Ip = s.getInetAddress().toString();
    System.out.println("正在获取客户端的信息,请待........\n");
    InputStream is =null;
    String reMsg =null;
    try{
    is = s.getInputStream();
    byte [] buf = new byte [1024];
    int len = is.read(buf);
    reMsg = new String(buf,0,len);
    System.out.println(Ip+":" + reMsg);
    }catch(Exception e){
    e.printStackTrace();
    }
    return reMsg;
    }
    }
      

  8.   

    把操作系统 进程通信  那块钻研一下  学习一下思想 再结合java通讯知识  注意结构一定要清晰...
      

  9.   

    正如楼上所说  用Servert做中转 
     收一条后在发一条 
    一直...
      

  10.   

    两个客户端无法直接通过
    可以使用 udp协议
      

  11.   

    这个不就是 P2P 吗?
    JXTA 不就是做整个的