簡體   English   中英

異步單服務器使用C#的多個客戶端

[英]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服務器應用程序?” 這里。 但是我可以給你一些提示。 通常,您將有一個偵聽器套接字(如您所願)和一個等待新連接的阻塞調用。 不必等待偵聽器循環中的任何同步對象。

接受新連接后,您將獲得一個新的套接字-分配給該新連接的套接字。 我看不到您在哪里接這個新插座。

然后為該新連接啟動一個新線程。

參見https://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k(System.Net.Sockets.TcpListener);k(TargetFrameworkMoniker-.NETFramework

問候,

亞當。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM