PDA

View Full Version : سوال: نرم افزار کلاینت - سرور و خطای an existing connection was forcibly closed by the remote host



javidahm
یک شنبه 27 فروردین 1391, 10:34 صبح
سلام به همه دوستان
من یه نرم افزار نوشتم که از سه قسمت تشکیل شده
ServerBase
Server
Client
که server و client به serverbase کانکت میشن همه چیز تویه نرم افزار خوب کار میکنه تا وقتی که یکی از client ها ریست میشه و این پیغام خطارو serverbase از بخش ReceiveData میده
an existing connection was forcibly closed by the remote host

کد قسمت ReceiveData رو میزارم لطفا راهنمایی کنید.



private void ReceiveData(IAsyncResult asyncResult)
{
try
{
byte[] data;

// Initialise a packet object to store the received data
Packet receivedData = new Packet(this.dataStream);

// Initialise a packet object to store the data to be sent
Packet sendData = new Packet();

// Initialise the IPEndPoint for the clients
IPEndPoint clients = new IPEndPoint(IPAddress.Any, 0);

// Initialise the EndPoint for the clients
EndPoint epSender = (EndPoint)clients;

// Receive all data
serverSocket.EndReceiveFrom(asyncResult, ref epSender);

// Start populating the packet to be sent
sendData.ChatDataIdentifier = receivedData.ChatDataIdentifier;
sendData.ChatName = receivedData.ChatName;

switch (receivedData.ChatDataIdentifier)
{
case DataIdentifier.Message:
sendData.ChatMessage = string.Format("{0}/{1}", receivedData.ChatName, receivedData.ChatMessage);
break;

case DataIdentifier.LogIn:
// Populate client object
Client client = new Client();
client.endPoint = epSender;
client.name = receivedData.ChatName;

// Add client to list
this.clientList.Add(client);

sendData.ChatMessage = string.Format("{0}/Connect/-", receivedData.ChatName);
break;

case DataIdentifier.LogOut:
// Remove current client from list
foreach (Client c in this.clientList)
{
if (c.endPoint.Equals(epSender))
{
this.clientList.Remove(c);
break;
}
}

sendData.ChatMessage = string.Format("{0}/Disconnect/-", receivedData.ChatName);
break;
}

// Get packet as byte array
data = sendData.GetDataStream();

foreach (Client client in this.clientList)
{
if (client.endPoint != epSender || sendData.ChatDataIdentifier != DataIdentifier.LogIn)
{
// Broadcast to all logged on users
serverSocket.BeginSendTo(data, 0, data.Length, SocketFlags.None, client.endPoint, new AsyncCallback(this.SendData), client.endPoint);
}
}

// Listen for more connections again...
serverSocket.BeginReceiveFrom(this.dataStream, 0, this.dataStream.Length, SocketFlags.None, ref epSender, new AsyncCallback(this.ReceiveData), epSender);

// Update status through a delegate
this.Invoke(this.updateStatusDelegate, new object[] { sendData.ChatMessage });
}
catch (Exception ex)
{
MessageBox.Show("ReceiveData Error: " + ex.Message, "ServerBase Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}