假设有两个socket
客户端socket 和服务器socket
客户端socket发送消息 服务器socket接受消息 然后服务器socket回消息 最后客户端socket接受回应
至此socket的生命周期应该结束了吧,如果客户端socket想根据服务器的回应信息继续通讯,是不是还要
重新建立socket,知道的请解释详细点,谢谢

解决方案 »

  1.   

    不需要!!建立了socket之后,你可以重新建立一个线程专门用来接收数据和发送数据!!将其写在线程类while(true)中,只要你不退出,这个线程就会一直监听着接受消息和发送消息!!
      

  2.   

    放在循环中,在run()中加入while(true){   “在这加入Socket接受+睡眠” }
    在循环中accept(),接受一次信息后之后就睡眠,直到下一次在有数据后就唤醒线程。。然后在睡眠
      

  3.   

    对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
    (1) 创建Socket;
    (2) 打开连接到Socket的输入/出流;
    (3) 按照一定的协议对Socket进行读/写操作;
    (4) 关闭Socket.
    第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。
    下面是一个典型的创建Server端ServerSocket的过程。
      服务器端程序: MultiTalkServer.java  import java.io.*;
      import java.net.*;
      import ServerThread;
      public class MultiTalkServer{
       static int clientnum=0; //静态成员变量,记录当前客户的个数
       public static void main(String args[]) throws IOException {
        ServerSocket serverSocket=null;
        boolean listening=true;
        try{
          serverSocket=new ServerSocket(4700); 
          //创建一个ServerSocket在端口4700监听客户请求
        }catch(IOException e) {
          System.out.println("Could not listen on port:4700."); 
          //出错,打印出错信息
          System.exit(-1); //退出
        }
        while(listening){ //永远循环监听
          new ServerThread(serverSocket.accept(),clientnum).start();
          //监听到客户请求,根据得到的Socket对象和
           客户计数创建服务线程,并启动之
          clientnum++; //增加客户计数
        }
        serverSocket.close(); //关闭ServerSocket
      }
    }以上的程序中总是让它不停的循环接收,一旦有客户请求,Server总是会创建一个服务线程来服务新来的客户,而自己继续监听。程序中accept()是一个阻塞函数,所谓阻塞性方法就是说该方法被调用后,将等待客户的请求,直到有一个客户启动并请求连接到相同的端口,然后accept()返回一个对应于客户的socket。这时,客户方和服务方都建立了用于通信的socket,接下来就是由各个socket分别打开各自的输入/输出流。