2011-12-20 13 views
0

我可以在同一套接字上發送和接收UDP數據報,我用於TCP通信。在我的應用程序中存在多媒體通信,我必須使用UDP進行通信。如果我創建一個新的套接字,它拋出的屬性的例外LingerStateNoDelay。當我將老套接字實例賦值給其他套接字變量時,它不允許我更改屬性,因爲大部分屬性都是隻讀的。在TCP連接區域發送數據。在同一應用程序中使用不同的協議使用相同的套接字

* 碼*

插座SendingSocket =新的Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); IPEndPoint Endp = new IPEndPoint(IPAddress.Parse(「192.168.3.233」),port);

SendingSocket.Bind(Endp);

while(SendingSocket.Connected)
{ string Message =「通過UDP發送測試消息」; ASCIIEncoding Encode = new ASCIIEncoding(); byte [] MessageBytes = Encode.GetBytes(Message); SendingSocket.SendTo(MessageBytes,0,MessageBytes.Length,SocketFlags.None,Endp); }'

+1

TCP和UDP的工作完全不同。 TCP在客戶端/服務器之間維持一個持續的連接,直到關閉/丟棄。 UDP不。我見過的任何軟件都需要使用兩個套接字,一個用於TCP,另一個用於UDP。 – GeoffM 2011-12-20 10:19:08

+0

我只是問,它是應用程序的要求。我有可分離的溝通 – Samie 2011-12-20 11:10:34

回答

0

不可以。您不能對TCP和UDP使用相同的套接字。套接字只能綁定一個協議。

+0

在我的情況下,SocketA是綁定到TCP.I想創建一個用於UDP通信的SocketB。當我以這種方式創建它時,它拋出的錯誤代碼** 10045 **和** 10042 ** ..我認爲在SocketA連接到MachineA時創建Socket對象時會拋出異常,同時我也打算與MachineA通信。 – Samie 2011-12-20 13:17:36

+0

給我們展示一些代碼.. – jgauffin 2011-12-20 13:37:30

+0

Socket SendingSocket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); IPEndPoint Endp = new IPEndPoint(IPAddress.Parse(「192.168.3.233」),port); SendingSocket.Bind(Endp); while(SendingSocket.Connected); { string Message =「通過UDP發送測試消息」; ASCIIEncoding Encode = new ASCIIEncoding(); byte [] MessageBytes = Encode.GetBytes(Message); SendingSocket.SendTo(MessageBytes,0,MessageBytes.Length,SocketFlags.None,Endp); }' – Samie 2011-12-20 15:12:18

1

很難從該代碼片段中知道,但可能不需要SendingSocket.Bind(Endp),因爲您的SendingSocket.SendTo也包含IP終點。也請嘗試簡單

SendingSocket.SendTo(MessageBytes, Endp); 
相關問題