c#tcp无法在Intranet外工作

时间:2015-09-27 17:49:27

标签: 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();
        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

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”

确保在完成插座后关闭插座。