[英]C# sockets server unable to receive data from same client connection more than once
我最近問了一個相關的問題, 在C#中我如何讓套接字繼續保持打開狀態並接受新數據? 並解決了一些問題,但是現在我很難讓我的服務器不止一次從同一客戶端接收數據。
我已經在VS中使用Windows窗體編寫了一個簡單的套接字服務器,該服務器具有一個調用接收函數的按鈕
public void Receive()
{
try
{
byte[] bytes = new byte[256];
received = s1.Accept().Receive(bytes);
receivedText.Text += System.Text.ASCIIEncoding.ASCII.GetString(bytes);
}
catch (SocketException e)
{
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
return;
}
}
如果我是第一次從客戶端發送郵件,它會起作用,但是如果我嘗試發送其他郵件,然后單擊“接收”,則服務器只會循環,並且永遠不會拾取新數據。 但是,如果我從其他地方發送,或者從客戶端重新啟動連接,則可以發送數據。
我希望服務器能夠一次從同一客戶端接收任何數量的數據。 請詢問您是否需要更多代碼/細節。 不確定什么是相關的,因為我是套接字編程的新手。
每個客戶端只能調用一次Accept(),而不必每次都希望接收新數據。 Accept()基本上等待客戶端連接到服務器套接字s1(並返回一個新的套接字以與此客戶端發送/接收數據),因此在這里每次調用Receive()函數時,套接字都會等待另一個客戶端進行連接連接,這就是為什么它只能運行一次的原因。
這是一個示例(代碼來自您先前的問題):
s1.Bind(endP);
s1.Listen(10);
Socket s2 = s1.Accept(); // Waits for a client to connect and return a socket, s2, to communicate with him
while (true) {
Receive(s2);
}
...
Receive()函數:
public void Receive(Socket s)
{
try
{
byte[] bytes = new byte[256];
received = s.Receive(bytes);
receivedText.Text += System.Text.ASCIIEncoding.ASCII.GetString(bytes);
}
catch (SocketException e)
{
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
return;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.