1 回答

TA貢獻1712條經驗 獲得超3個贊
事實證明,利用 Session 對象并不理想。第一次使用后,該端口將保持打開狀態,根據顯示的 PID netstat,IIS Worker 將擁有它。因此,似乎不可能調用Close()它。
解決方案是在以下之后關閉服務器套接字(s1在我的示例中)Accept:
[...]
s1.Listen(32);
// block until there's a connection
Socket s2 = s1.Accept();
// *close the server socket*
s1.Close();
// only save s2 for later
Session["s2"] = s2;
然后只使用s2,例如:
// ...later on
Socket s1 = Session["s1"] as Socket;
try {
while ((bytesRead = s1.Receive(receiveBuffer)) > 0 ) {
byte[] received = new byte[bytesRead];
Array.Copy(receiveBuffer, received , bytesRead);
Response.BinaryWrite(received);
}
} catch(Exception ex){
[...]
先前的解決方案使“清理”變得不必要。
- 1 回答
- 0 關注
- 272 瀏覽
添加回答
舉報