我在使用java编写socket程序的时候遇到问题:服务端在接受了客户端发送的信息并进行处理之后,就自动关闭了。我希望服务端能够继续开着,处理可能从其它客户端发送来的请求。请问有没有办法做到这点?

解决方案 »

  1.   

    ServerSocket server = new ServerSocket(2008);
    Socket you = null;
    while(true)
    {
        you = server.accept();
        if(you != null)
          // 启动服务线程;
    } 这样就可以了
      

  2.   

    这样的socket是同步的,*(即阻塞的),应该有请求时创建一个线程去处理,对性能有影响了,网上有个异步的socket例子,可以看一下拉!可以判断力连接状态,根据状态决定关闭或监听!
      

  3.   

    以前用Asp.net做过:服务器端创建子线程,然后死循环不断接受客户端连接。
    我也没有仔细研究过这东西,虽然是C#的代码也把它贴出来吧。private void button1_Click(object sender, System.EventArgs e)
    {
    int port=Int32.Parse(textBox2.Text);
    tcl=new TcpListener(System.Net.IPAddress.Parse(textBox1.Text),port);
    tcl.Start(); //获得本地主机IP地址
    string localhost = (Dns.GetHostByName(Dns.GetHostName())).AddressList[0].ToString();
    listBox1.Items.Add("服务器已启动 - "+localhost); //创建子线程,不断接受客户端连接
    mainThread=new Thread(new ThreadStart(acceptClient));
    mainThread.IsBackground=true;
    mainThread.Start(); button1.Enabled=false;
    textBox3.Focus();
    } private void acceptClient()
    {
    while(true)
    {
    Socket socket=tcl.AcceptSocket();
    Server server=new Server(socket,this);
    users.Add(server);
    }
    }
      

  4.   

    用nio包里的看看,是非阻塞的