2014-08-28 31 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