2012-09-23 65 views
0

這裏UDP數據包是我的客戶問題與測試發送與控制檯

class Program 
{ 
    static void Main(string[] args) 
    { 
     string msg; 
     Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 999); 
     sck.Bind(ep); 
     byte[] msgbytes; 

     while (true) 
     { 
      msg = Console.ReadLine(); 
      msgbytes = ASCIIEncoding.ASCII.GetBytes(msg); 
      sck.BeginSendTo(msgbytes, 0, msgbytes.Length, SocketFlags.None, ep, null, sck); 
      Console.WriteLine("sent"); 
     } 
    } 

    void callBack(IAsyncResult result) 
    { 
     ((Socket)result.AsyncState).EndSendTo(result); 
    } 
} 

}

代碼這裏是服務器端的代碼

class Program 
{ 
    static void Main(string[] args) 
    { 
     string msg; 
     Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     IPEndPoint ep = new IPEndPoint(IPAddress.Any, 999); 
     sck.Bind(ep); 
     byte[] msgbytes = new byte[100]; 

     EndPoint client = (EndPoint)ep; 

     int bytesrec; 
     while (true) 
     { 
      bytesrec = sck.ReceiveFrom(msgbytes, 0, msgbytes.Length, SocketFlags.None, ref client); 
      msg = ASCIIEncoding.ASCII.GetString(msgbytes); 
      Console.WriteLine("4"); 
     } 
    } 
} 

}

問題當我嘗試與客戶端進行發送時,服務器沒有收到任何數據包。從不寫入「4」,它確認從執行的sck.receive。

回答

1

在您的客戶端代碼更改如下: 而不是sck.Bind(ep);使用sck.Connect(ep); 和替代

sck.BeginSendTo(msgbytes, 0, msgbytes.Length, SocketFlags.None, ep, null, sck); 

使用

sck.Send(msgbytes, msgbytes.Length, SocketFlags.None); 

,它應該工作...

編輯: 如果您確實需要使用異步發送...您可以執行如下操作:

IAsyncResult asyncres = sck.BeginSendTo(msgbytes, 0, msgbytes.Length, SocketFlags.None, ep, null, sck); 
sck.EndSendTo(asyncres); 
+0

-1。您無法連接到可以綁定到的端點。這個概念甚至沒有意義。請不要在這裏發佈純粹的猜測。 – EJP

+0

我沒有連接到我綁定的端點。我告訴他要替換那個代碼... – avi

+0

+1 ..BTW:當前'BeginSendTo'也可以工作,但是我同意'Send'比較好。 –

-2

您的服務器需要在0.0.0.0上監聽,因爲它正在進行,否則您將進入平臺相關區域; 您的客戶端需要綁定到外部IP地址,而不僅僅是127.0.0.1,否則它無法從本地主機發送任何數據包。

+0

它已經聽取0.0.0.0(IPAddress.Any) –

+0

@ L.B糟糕,請參閱編輯。 – EJP

+0

@downvoter我越來越多的人把不明原因的提議視爲網站破壞行爲,被忽視。如果您有預訂,讓我們聽聽。 – EJP