【问题标题】:Data Transfer Between Remote Computers远程计算机之间的数据传输
【发布时间】:2014-08-29 00:58:02
【问题描述】:

我要做的是将数据(字符串或字节)从一台计算机简单地传输到另一台计算机。 我使用套接字作为远程计算机之间的链接。 我刚开始我的项目,但问题是我无法在计算机之间建立成功的连接。 我不明白 IPEndpoint 中需要什么 IP 地址,我的计算机 IPv4?我的路由器IP?我认为我的代码有问题。 它的目的是拥有 1 个客户端和 1 个服务器,之后我会将其开发为更大的应用程序,但现在我的代码是:

服务器:

class Server
{
    static byte[] buffer;
    static string data;
    public static void StartListening()
    {
        while (true)
        {
            byte[] bytes = new Byte[100000];
            IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
            IPAddress ipAddress = ipHostInfo.AddressList[2];
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress,16000);
            Socket listener = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);
            try
            {
                listener.Bind(localEndPoint);
                listener.Listen(100);
                while (true)
                {
                    Socket handler = listener.Accept();
                    data = null;
                    while (true)
                    {
                        bytes = new byte[1000];
                        int bytesRec = handler.Receive(bytes);
                        data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
                        if (data != null)
                        {
                            Console.WriteLine(data);
                            break;
                        }

                    }
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

客户端:我尝试了 IPHostEntry 包含的所有三个 IP 地址,但它们也不起作用,我正在尝试使用笔记本电脑上的客户端程序。 代码:

public static void SendData(string send)
    {
        try
        {
            IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
            IPAddress ipAddress = ipHostInfo.AddressList[0];
            IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("MyIPAddressThat in hostinfo Addresses[2]"), 16000);
            Socket sender = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);
            try
            {
                sender.Connect(remoteEP);
                byte[] msg = Encoding.ASCII.GetBytes(send);
                sender.Send(msg);
                sender.Shutdown(SocketShutdown.Both);
                sender.Close();

            }
            #region Catch
            catch (ArgumentNullException ane)
            {
                Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
            }
            catch (SocketException se)
            {
                Console.WriteLine("SocketException : {0}", se.ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine("Unexpected exception : {0}", e.ToString());
            }

        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
            #endregion
    }

我想让你关注的是计算机或调制解调器需要哪个 IP 地址,也许是我的程序无法运行的原因。 感谢一个帮助。

【问题讨论】:

  • +1 因为在没有评论的情况下投反对票并不好......

标签: c# sockets


【解决方案1】:

我猜错误就在这里:

IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 11000);

为什么要将 IPAdress.Any 绑定到端点?它应该是您的服务器所在的 IP 地址。 您是否尝试过像这样将 ipAddress 作为参数传递?

IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000); 

【讨论】:

  • 我认为是IP地址。任何结果都是任何IP都可以连接到服务器,我的意思是客户端程序能够连接到服务器的任何计算机(我)
  • 终点就是你的终点。假设您有多个网卡(就像许多服务器一样),那么您需要指定服务器需要侦听的网络适配器(或 IP 地址)。我认为您可以过滤客户端的 IP 地址,但一旦建立套接字连接,您就必须这样做。
  • 在我对这段代码进行了一些更改后,它可以工作,但只能在我的电脑上工作,当它在我的笔记本电脑上时它不起作用,我认为这是因为客户端 IP 地址。
  • 您确定网络没有阻止您的通话吗?两台计算机之间可能有防火墙或路由器阻止了端口 16000。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多