我是新來的Java編程的Socket編程,並試圖瞭解下面的代碼是不是一個錯誤的事情。我的問題是:Java套接字:同一機器上同一端口上的多個客戶端線程?
我可以讓每個線程試圖連接到服務器實例在同一程序,預計在服務器上的多個客戶端來閱讀和與客戶」
public class Client extends Thread
{
...
void run()
{
Socket socket = new Socket("localhost", 1234);
doIO(socket);
}
}
public class Server extends Thread
{
...
void run()
{
// serverSocket on "localhost", 1234
Socket clientSock = serverSocket.accept();
executor.execute(new ClientWorker(clientSock));
}
}
之間的隔離寫入數據現在可以我有不同的線程試圖將當前計算機的同一個端口上連接多個客戶的實例?
例如,
Server s = new Server("localhost", 1234);
s.start();
Client[] c = new Client[10];
for (int i = 0; i < c.length; ++i)
{
c.start();
}
謝謝你們的東西,我以爲端口作爲一個單一的物理實體(如線),因爲它有一個單一的數字。所以我的想法是它只能被一個客戶端套接字使用,否則多個客戶端套接字一次可以寫入同一個線路。但是從你的答案來看,我認爲端口本身是由多個資源組成的(比如內存塊),但是套接字將被綁定到可能由某個綁定鍵索引的那些塊之一。 – espcorrupt 2010-05-13 04:16:34
該端口只是一個數字。它不符合任何物理。 A *連接*由元組{協議,源地址,源端口,目標地址,目標端口}定義。客戶端操作系統將負責確保每個傳出連接的不同出站端口號。因此,即使它們全部來自同一個客戶端源主機,也不會有多次入站連接到同一個目標主機/端口的問題。 – EJP 2010-05-13 10:16:28