我刚接触网络和c#。我正在尝试开发一个异步单服务器,多个异步客户端可以连接到该服务器,并且可以在每个客户端之间发送和接收消息问题发生在我的服务器上,它只能连接到一个客户端。我正在使用线程连接到多个客户端,但它不工作。异步单服务器多客户端使用c#
我正在使用.NET 4.5框架。
注意:我从客户端收到某些东西时使用StateObject。另外,我的服务器只在一个客户端连接的情况下工作(如果我删除了threadclient()方法)。
Server:
public class mainclass
{
public static void Main()
{
newTCPNetworkNode nn = new newTCPNetworkNode();
nn.Initialize();
nn.threadClient();
}
}
public class StateObject
{
public Socket workSocket = null;
public const int BufferSize = 100;
public byte[] buffer = new byte[BufferSize];
}
class newTCPNetworkNode
{
private IPAddress addr;
private IPEndPoint endpoint;
private TcpListener mListener;
public static ManualResetEvent allDone = new ManualResetEvent(false);
public Thread listenthread;
public void Initialize()
{
addr = IPAddress.Parse("127.0.0.1");
endpoint = new IPEndPoint(addr, 1234);
mListener = new TcpListener(endpoint);
mListener.Start();
}
public void threadClient()
{
listenthread = new Thread(new ThreadStart(Start));
listenthread.Start();
}
public override void Start()
{
Console.WriteLine("Starting TCP server");
try
{
while (true)
{
allDone.Reset();
mListener.BeginAcceptTcpClient(new AsyncCallback(OnClientConnected), mListener);
allDone.WaitOne();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public void OnClientConnected(IAsyncResult result)
{
allDone.Set();
TcpListener listener = (TcpListener)result.AsyncState;
Socket handler = listener.EndAcceptSocket(result);
StateObject state = new StateObject();
state.workSocket = handler;
try
{
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
我已更新OnClientConnected()方法。你可以看到,当一个新的客户端连接时,一个stateobject被调用,它为新客户端提供了一个新的套接字。 –