我在得到一個簡單的服務器/客戶端套接字應用在兩臺計算機之間工作在C#的問題,我已經開始爲江郎才盡之間的連接插座。我在兩臺機器上運行Windows XP,並且我已經爲防火牆添加了除了端口以外的端口以及exe文件。奇怪的部分是,它可以在單臺機器上運行的客戶端和服務器完美工作。故障電腦
服務器代碼:
IPAddress ipAddress;
IPAddress.TryParse("127.0.0.1", out ipAddress);
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 51000);
_ListenerSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.IP);
try
{
_ListenerSocket.Bind(localEndPoint);
_ListenerSocket.Listen(1000);
while (_Running)
{
_ListenerSync.Reset();
_ListenerSocket.BeginAccept(new AsyncCallback(AcceptCallback), _ListenerSocket);
_ListenerSync.WaitOne();
}
_ListenerSocket.Shutdown(SocketShutdown.Both);
_ListenerSocket.Close();
}
客戶端代碼:
tTarget = new Socket(_IP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
tTarget.Connect(_IP, 51000);
AcceptCallback永遠不會被調用。所以有些東西在觸發之前拒絕連接。此客戶端/服務器設置適用於單臺計算機上的內部連接(在同一臺計算機上同時運行客戶端和服務器),但嘗試在本地網絡上連接兩臺計算機時失敗。
一個異常被拋出的tTarget.Connect()調用:
No connection could be made because the target machine actively refused it
我已經安裝了Wireshark的在兩臺機器上,以確保數據包到達,106是客戶端和101是服務器。
262 24.724892 192.168.0.106 192.168.0.101 TCP brlp-2 > 51000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
263 24.724922 192.168.0.101 192.168.0.106 TCP 51000 > brlp-2 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
270 25.144866 192.168.0.106 192.168.0.101 TCP brlp-2 > 51000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
271 25.144887 192.168.0.101 192.168.0.106 TCP 51000 > brlp-2 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
288 25.647842 192.168.0.106 192.168.0.101 TCP brlp-2 > 51000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
289 25.647874 192.168.0.101 192.168.0.106 TCP 51000 > brlp-2 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
注意:這是引發異常之前端口51000上的所有網絡通信。
看起來沒有任何東西被阻擋,因爲它在一臺計算機上工作,所以我認爲它可能是套接字上的設置,它不允許來自遠程PC的連接。任何意見將不勝感激,謝謝。