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

c# TCP不能在内网外工作

这一行:

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 "

请确保在使用完插座后关闭它们。