我已經通過網絡服務器異步套接字接收數據:c#獲取從瀏覽器發送的郵件表單數據,有時套接字會關閉。爲什麼?
var e = new SocketAsyncEventArgs();
e.Completed += new EventHandler<SocketAsyncEventArgs>(e_Completed);
while (true)
{ allDone.Reset();
mySocket.AcceptAsync(e);
allDone.WaitOne();
}
而另一種方法:
public void e_Completed(object sender, SocketAsyncEventArgs e)
{
var socket = (Socket)sender;
ThreadPool.QueueUserWorkItem(handleTcpRequest, e.AcceptSocket);
e.AcceptSocket = null;
socket.AcceptAsync(e);
}
這是handleTcpRequest method.in這一部分,我收到來自插座的數據和做了手術:
public void handleTcpRequest(object state)
{
string sBuffer = "";
string BufferTotal = "";
byte[] secureMessage;
Byte[] bReceive = new Byte[1024];
var mySocket = (Socket)state;
do
{
try
{
firstBufferRead = mySocket.Receive(bReceive, bReceive.Length, 0);
}
catch (Exception ex)
{
Console.WriteLine("Error Occurred (:))) " + ex.Message);
}
sBuffer += Encoding.GetEncoding(1252).GetString(bReceive, 0, firstBufferRead);
BufferTotal += Encoding.UTF8.GetString(bReceive, 0, firstBufferRead);
} while (mySocket.Available != 0);
.
.
.
.
mySocket.Close();
}
怎麼了? 有時連接重置並關閉。這發生在距離較遠或發佈數據不是多部分時。但在多部分發生很少。更多的形式不是多部分。 何時何地應關閉套接字? 當我在handleTcpRequest方法與它的本地套接字工作。這不正確嗎?我找不到問題的根源
您正在使用異步IO,然後始終等待它完成。這比僅使用同步功能更復雜和更慢。僅供參考。 – usr
您的錯誤處理只是繼續下去。這可能是錯誤的。你只會操作無效的數據。而是中止處理。 – usr
不,不錯。當有人上傳一些文件或有長時間的請求時,其他人可以發送他們的請求。不要對這件事感到困惑 –