[英]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.