2014-07-09 19 views
1

所以我試圖發送一個數據包,但不斷收到此錯誤C#發送或接收數據的請求被禁止,因爲套接字未連接

任何幫助都會很棒!

非常感謝!

錯誤消息: 發送或接收數據的請求,但不允許的,因爲在插座沒有被連接和供給,地址(使用sendto調用發送數據報套接字時)

代碼:

private void button1_Click(object sender, EventArgs e) 
    { 
     byte[] packetData = Encoding.ASCII.GetBytes(textBox1.Text); 

     const string ip = "75.126.77.26"; 
     const int port = 5588; 


     var ep = new IPEndPoint(IPAddress.Parse(ip), port); 


     var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
     client.SendTo(packetData, ep); 
    } 
} 

}

+1

你試過連接'Socket'? – Jonny

+0

我發佈了一個更正你的代碼;你已經創建了Endpoint和Socket;你需要調用Socket上的Connect作爲參數。 –

回答

2

變種客戶=新的Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)

這創建了將使用TCP(這是一個流協議)的插座。如果要在面向連接的套接字上調用Socket.SendTo,則必須首先連接它,方法是調用Socket.Connect

如果您打算只發送數據報,那麼使用UDP代替它是一個更好的選擇,它根本不需要連接。

VAR的客戶=新的Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp)

1
private void button1_Click(object sender, EventArgs e) 
{ 
    byte[] packetData = Encoding.ASCII.GetBytes(textBox1.Text); 

    const string ip = "75.126.77.26"; 
    const int port = 5588; 


    var ep = new IPEndPoint(IPAddress.Parse(ip), port); 


    var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
    client.Connect(ep); 
    client.SendTo(packetData, ep); 
} 

爲了清楚起見,加入這一行:

client.Connect(ep); 
-2

我想你要找的是在致電client.SendTo之前致電client.Connect。撥打連接後,您還需要撥打client.Connected以確保您已連接。

此幫助頁面有一個使用套接字對象的示例:http://msdn.microsoft.com/en-us/library/2b86d684%28v=vs.110%29.aspx

// Connect to the host using its IPEndPoint. 
    s.Connect(hostEndPoint); 

    if (!s.Connected) 
    { 
     // Connection failed, try next IPaddress. 
     strRetPage = "Unable to connect to host"; 
     s = null; 
     continue; 
    } 
+0

感謝所有你的傢伙的幫助,所有的都非常完美,非常感謝:) – Reptic

+1

使用像這樣的連接屬性是沒用的。它永遠是真的。我不確定爲什麼每個人都這麼做。即使它可能是錯誤的,這種錯誤處理也沒有幫助。 – usr

相關問題