服务器:
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
答案 0 :(得分:0)
这一行:
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”
确保在完成插座后关闭插座。