Пишу программу на C# в VS2005 .NET
проблема с вторым и последующим клиентом.
запускаю сервер. подключчаюсь к нему. отправляю сообщение и сервер как положено разрывает рабочий сокет.
пробую подключиться заново mainSocket уже не отвечает.
в чем может быть проблема???
классы рабочей формы и сервера:
using System;
using System.Windows.Forms;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text;
namespace Server
{
public partial class Form1 : Form
{
private AsyncServer AServer = new AsyncServer();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
AServer.OnRecived += new EventHandler(RecivedData);
AServer.Start();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
AServer.Stop();
}
public void RecivedData()
{
AServer.SendData("You send: " + AServer.myData);
}
}
// -S-E-R-V-E-R- - -S-O-C-K-E-T- - -C-L-A-S-S-
public delegate void EventHandler();
public class AsyncServer
{
private Socket mainSocket;
private Socket workSocket;
public string myData = "No Data";
private byte[] buffer = new byte[256];
public event EventHandler OnRecived;
public class SocketPacket
{
public Socket Socket;
public byte[] DataBuffer = new byte[256];
}
public void Start()
{
try
{
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, 12007);
mainSocket.Bind(ipLocal);
mainSocket.Listen(4);
mainSocket.BeginAccept(new AsyncCallback(OnClientConnect), null);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
private void OnClientConnect(IAsyncResult asyn)
{
try
{
workSocket = mainSocket.EndAccept(asyn);
if (workSocket.Connected)
WaitForData();
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
private void WaitForData()
{
try
{
workSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnDataReceived), null);
}
catch (SocketException se)
{
}
}
private void OnDataReceived(IAsyncResult asyn)
{
try
{
int iRx = 0;
iRx = workSocket.EndReceive(asyn);
char[] chars = new char[iRx + 1];
Decoder d = Encoding.ASCII.GetDecoder();
int charLen = d.GetChars(buffer, 0, iRx, chars, 0);
myData = new string(chars);
OnRecived();
}
catch (SocketException se)
{
}
}
public void SendData(string msg)
{
try
{
byte[] byData = System.Text.Encoding.ASCII.GetBytes(msg);
workSocket.Send(byData);
workSocket.Close();
}
catch (SocketException se)
{
}
}
public void Stop()
{
if (workSocket != null)
workSocket.Close();
if (mainSocket != null)
mainSocket.Close();
}
}
}