套接字多个客户端

时间:2016-03-23 10:11:59

标签: java client-server

假设我有4个客户端分别拥有端口号1,2,3,4和一个服务器。

我想在服务器和客户端之间建立连接,然后将客户端名称和ipaddress发送到服务器,并在服务器上简单读取该字符串。
在服务器端套接字编程中,我使用for循环访问端口1,2,3,4上的各个客户端。

现在我的问题是当portnum 2上的客户端没有活动时,服务器应该等待1秒然后移动到下一个端口num 3但它正在发生,所以服务器卡在该循环中,直到它连接到portnum 2

我使用过setSoTimeout功能,但问题仍然没有解决。

请帮助我

服务器端代码

package server;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server implements Runnable {
   Socket csocket;
   Server(Socket csocket) {
      this.csocket = csocket;
   }

   public static void main(String args[]) 
   throws Exception {
       for (int i=1; i<=4; i++) {
           ServerSocket ssock = new ServerSocket(i);
           System.out.println("Listening");
      //while (true) {
           Socket sock = ssock.accept();
           System.out.println("Connected");
           new Thread(new Server(sock)).start();
       }
   }

   public void run() {
      try {
           DataInputStream dis = new DataInputStream(csocket.getInputStream());
           String str=dis.readUTF();
           System.out.print(str);

           dis.close();
           csocket.close();
      }
      catch (IOException e) {
         System.out.println(e);
      }
   }
}

客户端代码

package client;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client
{
    Socket s;

    DataOutputStream dout;

    public Client() {
        while(true)
            try { 
              s=new Socket("192.168.1.101",1);
              dout= new DataOutputStream(s.getOutputStream());
              java.net.InetAddress j = java.net.InetAddress.getLocalHost();
              dout.writeUTF(j.getHostName()+"\t\t\t"+j.getHostAddress());
              //Userinfo();    
         }
         catch(Exception e)
         {
             System.out.println(e);
         }
    }

//   public void Userinfo() throws UnknownHostException, IOException
//   {
//      
//       
//   }

   public static void main(String as[])
    {
        new Client(); 
    }
}

0 个答案:

没有答案