saied_hacker
سه شنبه 19 فروردین 1393, 20:35 عصر
سلام
این یه برنامه است که سرور و کلاینت یکسری مکالماتی با هم دارن، در حالت عادی ( تعداد کم درخواست ها و پاسخ ها به خوبی کار میکنه ) اما وقتی سرور میخاد تعداد زیادی بسته رو پشت سر هم ارسال کنه توی کلایت مشکل پیش میاد و بسته ها قاطی میشن.
برای مثال این یک ارسال و دریافت بین سرور و کلاینت هست که سایز هربسته مشخص شده.
send ---------- 496 received ---------- 496
send ---------- 613
received ---------- 613
send ---------- 680
received ---------- 680
send ---------- 227
send ---------- 697
received ---------- 227
send ---------- 722
send ---------- 710
received ---------- 697
received ---------- 1432
از داده های بالا مسخص میشه که دو تا ارسال اخری که سرور انجام داده با سایز های 722 و 710 ( سایزش شده 1432 ) با هم دریافت شدن و اینجوری داده ها نامعتبر شده و به درد نمی خورن.
دوستان راه حلی برای این مشکل ندارن ؟؟؟
این کد برای دریافت در کلاینت هست :
private void ReceiverCallBack(IAsyncResult ar) {
try
{
int size = _socket.EndReceive(ar);
_socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiverCallBack), null);
System.Diagnostics.Trace.WriteLine(" received ---------- " + size.ToString());
if (MessageReceived != null)
{
byte[] temp = new byte[size];
Array.Copy(_buffer, temp, size);
MessageReceived(temp);
}
}
catch (Exception exp)
{
// :)
}
}
و این هم ارسال در سرور :
public bool SendMessage(Socket socket, byte[] message, string logMessage = "Unknow") {
try
{
MsgTemp msg = new MsgTemp(socket, logMessage, message);
System.Diagnostics.Trace.WriteLine(" send ---------- " + message.Length.ToString());
socket.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(SendCallBack), msg);
return true;
}
catch
{
// :)
}
return false;
}
پیشاپیش متشکرم :بوس:
این یه برنامه است که سرور و کلاینت یکسری مکالماتی با هم دارن، در حالت عادی ( تعداد کم درخواست ها و پاسخ ها به خوبی کار میکنه ) اما وقتی سرور میخاد تعداد زیادی بسته رو پشت سر هم ارسال کنه توی کلایت مشکل پیش میاد و بسته ها قاطی میشن.
برای مثال این یک ارسال و دریافت بین سرور و کلاینت هست که سایز هربسته مشخص شده.
send ---------- 496 received ---------- 496
send ---------- 613
received ---------- 613
send ---------- 680
received ---------- 680
send ---------- 227
send ---------- 697
received ---------- 227
send ---------- 722
send ---------- 710
received ---------- 697
received ---------- 1432
از داده های بالا مسخص میشه که دو تا ارسال اخری که سرور انجام داده با سایز های 722 و 710 ( سایزش شده 1432 ) با هم دریافت شدن و اینجوری داده ها نامعتبر شده و به درد نمی خورن.
دوستان راه حلی برای این مشکل ندارن ؟؟؟
این کد برای دریافت در کلاینت هست :
private void ReceiverCallBack(IAsyncResult ar) {
try
{
int size = _socket.EndReceive(ar);
_socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiverCallBack), null);
System.Diagnostics.Trace.WriteLine(" received ---------- " + size.ToString());
if (MessageReceived != null)
{
byte[] temp = new byte[size];
Array.Copy(_buffer, temp, size);
MessageReceived(temp);
}
}
catch (Exception exp)
{
// :)
}
}
و این هم ارسال در سرور :
public bool SendMessage(Socket socket, byte[] message, string logMessage = "Unknow") {
try
{
MsgTemp msg = new MsgTemp(socket, logMessage, message);
System.Diagnostics.Trace.WriteLine(" send ---------- " + message.Length.ToString());
socket.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(SendCallBack), msg);
return true;
}
catch
{
// :)
}
return false;
}
پیشاپیش متشکرم :بوس: