c# TCP不能在内网外工作
本文关键字:工作 TCP 不能 | 更新日期: 2023-09-27 18:14:39
服务器:
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(IPAddress.Parse("90.181.x.xxx"), 23466));
socket.Listen(1);
Socket accepteddata = socket.Accept();
data = new byte[accepteddata.SendBufferSize]; 6
int j = accepteddata.Receive(data);
byte[] adata = new byte[j];
for (int i = 0; i < j; i++)
adata[i] = data[i];
string dat = Encoding.Default.GetString(adata);
MessageBox.Show(dat);
和客户端:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
s.Connect(IPAddress.Parse("90.181.x.xxx"), 23466);
string q = "It work";
byte[] data = Encoding.Default.GetBytes(q);
s.Send(data);
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
问题是当我的朋友连接到它,他得到错误。是的,我已经端口转发了。我已经这样设置了内部/外部端口开始/结束为23466,ip地址为192.168.1.1
这一行:
socket.Bind(new IPEndPoint(IPAddress.Parse("90.181.x.xxx"), 23466));
应:socket.Bind(new IPEndPoint(IPAddress.Any, 23466));
当然你可以绑定到一个特定的IP地址,但它不应该硬编码。"IPAddress。Any"应该将套接字绑定到本地机器上的所有地址。您遇到的问题是您无法绑定到另一台机器(路由器)的地址。
这段代码还能编译吗?"6"是做什么的?
data = new byte[accepteddata.SendBufferSize]; 6
无论如何代码都很奇怪。运行服务器后,尝试打开命令提示符并键入"telnet localhost 23466",看看它是否打开了连接。您的朋友或您,都可以做"telnet 90.181.x"。x 23466 "
请确保在使用完插座后关闭它们。