PDA

View Full Version : حرفه ای: مشکل در بستن سوکت ها و وضعیتشان



mohsen.net
شنبه 01 آبان 1389, 15:09 عصر
while (true)
{

try
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
tcp = new TcpClient();// creates new tcpclient
// connect to host
tcp.Connect(Config.RemotingServerIP, Config.Port);
networkStream = tcp.GetStream();// get nrtwork stream


binaryFormatter.Serialize(networkStream, ht);//serialize object and send it via networkstream

}
catch (Exception exp)
{
;
}
finally
{
//free all resource
if (networkStream != null)
networkStream.Close();
tcp.Close();
networkStream.Dispose();

}


مشکل این هست که وقتی با تعداد زیاد این کار انجام میشه (هر 350 میلی ثانیه ) تعداد سوکتهای در حالت TIME_WAIT به سرعت زیاد می شود و سوکتها بسته نمی شوند . با اینکه تو finally همه را می بندم
حتی زمان ماندن در حالت TIME_WAIT را در رجیستری از 240 به 30 کم کردم اما فرقی نکرد. بعد از اینکه تعداد سوکتهای در حالت TIME_WAIT خیلی زیاد شد Exception میده .کسی راهی برای بستن سوکتها داره؟ یا مدیریت اینکار؟

mohsen.net
یک شنبه 02 آبان 1389, 16:02 عصر
سوالم را بد مطرح کردم؟
یا کسی راه حلی نداره؟

C Sharp
دوشنبه 03 آبان 1389, 09:11 صبح
چرا برای هر بار ارسال اطلاعات ، سوکت ایجاد میکنید ؟

mohsen.net
دوشنبه 03 آبان 1389, 10:52 صبح
با یکبار فراخوانی متد connect تست کردم نشد . وقتی یکبار stream گرفته شد دیگه متد getStream ، stream برنمی گردونه و exc میده
راه حلی دارید؟

C Sharp
سه شنبه 04 آبان 1389, 10:38 صبح
یکبار connect بشید ، داخل حلقه از استریم واسه ارسال استفاده کنین



BinaryFormatter binaryFormatter = new BinaryFormatter();
tcp = new TcpClient();// creates new tcpclient
// connect to host
tcp.Connect(Config.RemotingServerIP, Config.Port);
networkStream = tcp.GetStream();// get nrtwork stream

while (true)
{

try
{
binaryFormatter.Serialize(networkStream, ht);//serialize object and send it via networkstream

}
catch (Exception exp)
{
;
}
finally
{
//free all resource
if (networkStream != null)
networkStream.Close();
tcp.Close();
networkStream.Dispose();
Break;
}