C# 如何使不同子网上的两台计算机通过套接字进行通信?
我已经用Objective C在Mac上编写了一个服务器应用程序,具有以下套接字设置-C# 如何使不同子网上的两台计算机通过套接字进行通信?,c#,objective-c,.net,sockets,client-server,C#,Objective C,.net,Sockets,Client Server,我已经用Objective C在Mac上编写了一个服务器应用程序,具有以下套接字设置- addr4.sin_len = sizeof(addr4); addr4.sin_family = AF_INET; addr4.sin_port = htons(6832); addr4.sin_addr.s_addr = htonl(INADDR_ANY); if (kCFSocketSuccess != CFSocketSetAddress(_ipv4socket, (__bridge CFDataR
addr4.sin_len = sizeof(addr4);
addr4.sin_family = AF_INET;
addr4.sin_port = htons(6832);
addr4.sin_addr.s_addr = htonl(INADDR_ANY);
if (kCFSocketSuccess != CFSocketSetAddress(_ipv4socket, (__bridge CFDataRef) [NSData dataWithBytes:&addr4 length:sizeof(addr4)])) {
[self stop];
return NO;
}
其IP=ABC.DEF.64.188,子网掩码=255.255.255.0
我的客户端是C语言,具有以下套接字设置-
IPHostEntry ipHostInfo = Dns.Resolve("ABC.DEF.64.188");
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
// Create a TCP/IP socket.
client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
Wireless LAN adapter Wireless Network Connection:
Connection-specific DNS Suffix . : stonybrook.edu
Link-local IPv6 Address . . . . . : fe80::cd7d:846d:564a:3fa5%12
IPv4 Address. . . . . . . . . . . : 172.24.17.97
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Default Gateway . . . . . . . . . : 172.24.16.1
Windows机器的IP地址=ABC.DEF.205.118使用What is my IP?找到?。我猜windows机器在NAT后面有以下设置-
IPHostEntry ipHostInfo = Dns.Resolve("ABC.DEF.64.188");
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
// Create a TCP/IP socket.
client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
Wireless LAN adapter Wireless Network Connection:
Connection-specific DNS Suffix . : stonybrook.edu
Link-local IPv6 Address . . . . . : fe80::cd7d:846d:564a:3fa5%12
IPv4 Address. . . . . . . . . . . : 172.24.17.97
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Default Gateway . . . . . . . . . : 172.24.16.1
我在客户端遇到以下错误,服务器从未看到新的传入连接-
System.Net.Sockets.SocketException (0x80004005): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 130.245.64.188:6832 at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
两台计算机上都禁用了防火墙。当两台机器位于同一子网上时,它工作正常
如何使此连接工作?可能是端口问题;ABC.DEF.64.188正在使用端口6832,在您的设置中,但连接计算机使用的端口是什么?@I'I 6832是我在两台计算机上选择的端口号。有趣的是-如果您尝试从另一台计算机ping端口6832上的188主机,会发生什么情况?@I'L'I抱歉。我上了大学,没法让网络正常工作。我回家后会试试你的建议