Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#tcp不在内部网外工作_C#_Tcp_Ip - Fatal编程技术网

c#tcp不在内部网外工作

c#tcp不在内部网外工作,c#,tcp,ip,C#,Tcp,Ip,服务器: 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();

服务器:

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);
问题是,当我的朋友连接到它时,他收到错误。是的,我已转发了端口。我已设置如下:内部/外部端口开始/结束为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”


确保在使用完套接字后关闭它们。

服务器的IP很可能不是192.168.1.1,这通常是路由器的地址。在命令提示符中键入
ipconfig/all
,以查找计算机的IP地址。我也不太确定您是否可以绑定到公共IP地址。请详细解释您的网络配置。如果我键入ipconfig/all,我的ip地址为192.168.1.1。我的公共ip为90.181.0.0 know from。我建议您使用第三个程序分别测试服务器和客户端。HW集团的大力士做得很好。将其与Sysinternals TcpView相结合。
data = new byte[accepteddata.SendBufferSize]; 6