2014-08-28 64 views
0

我要做的是将数据(字符串或字节)从一台计算机简单传输到另一台计算机。 我使用套接字作为远程计算机之间的链接。 我在开始我的项目,但问题是我无法在计算机之间建立成功的连接。 我不明白什么IP地址需要在IPEndpoint,我的电脑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()); 
      } 
     } 
    } 
} 

客户:我尝试了所有三个IP地址该IPHostEntry包含,他们也没有工作,即时通讯从我的笔记本电脑尝试客户端程序。 代码:

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地址需要计算机或调制解调器,也许为什么我的程序没有工作。 感谢您的帮助。

+0

1,因为给不加评论了反对票是不是很好... – Kristof 2014-08-28 09:20:16

回答

0

我猜的错误就出在这里:

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); 
+0

我认为IP address.Any结果将是任何IP可以连接到服务器,我的意思是任何计算机客户端程序会能够连接到服务器(我) – Xboxbo 2014-08-28 09:46:29

+0

终点是您的终点。假设你有多个网卡(就像许多服务器一样),那么你需要指定服务器需要监听的网络适配器(或IP地址)。我认为你可以过滤客户端的IP地址,但是一旦套接字连接完成,你就必须这样做。 – Kristof 2014-08-28 09:52:36

+0

当我在这段代码中做了一些修改后,它只能在我的电脑上运行,当它在我的笔记本电脑中无法工作时,我认为它是因为客户端IP地址。 – Xboxbo 2014-08-28 16:59:23

相关问题