[英]asynchronous single server multiple clients using 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);
}
}
}
您在这里要求很多,Pratul。
恐怕我无法回答“如何构建多线程TCP服务器应用程序?” 这里。 但是我可以给你一些提示。 通常,您将有一个侦听器套接字(如您所愿)和一个等待新连接的阻塞调用。 不必等待侦听器循环中的任何同步对象。
接受新连接后,您将获得一个新的套接字-分配给该新连接的套接字。 我看不到您在哪里接这个新插座。
然后为该新连接启动一个新线程。
问候,
亚当。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.