工作,我有一個客戶端和服務器。客戶端綁定特定端口上的套接字,服務器向客戶端發回一個新端口,客戶端應在新端口號上綁定一個新套接字。Java客戶端 - 服務器應用程序管不上孩子線程
從主服務器線程,從我做起一旦服務器已準備就緒,並聽取了新的端口,這樣客戶端可以嘗試連接到新的端口將消息發送到客戶端一個線程。來自子線程的管道不會將消息發送給客戶端。 因此,客戶端和服務器都凍結,似乎是一個僵局,但我不知道。客戶端中的這一行代碼:System.out.println(「FROM SERVER:」+ inMsg_rport);沒有執行。
服務器代碼:
class server
{
public static void main(String argv[]) throws Exception
{
String newPort;
ServerSocket serverSocket = null;
Socket clientSocket = null;
try
{
serverSocket = new ServerSocket(5555);
clientSocket = serverSocket.accept();
DataOutputStream serverOut =
new DataOutputStream(clientSocket.getOutputStream());
int r_port = 5556;
Thread appThread = new Thread(new serverApp(serverOut, r_port));
appThread.start();
}
catch(IOException e)
{
System.out.println(e);
}
}
static class serverApp implements Runnable
{
DataOutputStream serverOut;
int nPort;
public serverApp(DataOutputStream servO, int r_port)
{
this.serverOut = servO;
this.nPort = r_port;
}
@Override
public void run()
{
ServerSocket serverSocket = null;
Socket clientSocket = null;
try
{
serverSocket = new ServerSocket(nPort);
serverOut.writeBytes(sr_port);
clientSocket = serverSocket.accept();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
}
客戶端代碼:
class client {
public static void main(String argv[]) throws Exception
{
String serverIp = argv[0];
String msg = argv[2];
int port = Integer.parseInt(argv[1]);
Socket clientSocket = new Socket(InetAddress.getByName(serverIp), port);
BufferedReader clientIn =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
String inMsg_rport = clientIn.readLine();
System.out.println("FROM SERVER: " + inMsg_rport);
int r_port = Integer.parseInt(inMsg_rport);
clientSocket.close();
System.out.println("Closed connection");
Socket new_clientSocket = new Socket(InetAddress.getByName(serverIp), r_port);
}
}
「客戶端綁定特定端口上的套接字,服務器發回一個新的端口,客戶端和客戶端應該綁定在新的端口號,一個新的socket。」爲什麼?爲什麼客戶端「綁定一個特定的端口」,如果它不是服務器?爲什麼客戶端需要綁定到第二個端口?還是第一個端口?服務器如何知道客戶端有哪些端口是免費的? – EJP