簡體   English   中英

定義客戶端的C#tcp套接字

[英]C# tcp sockets defining clients

我正在嘗試使用Visual Studio 2010設置tcp .net套接字網絡。到目前為止,它可以正常工作,我可以將客戶端連接到該網絡,但是目前我無法定義所連接的客戶端。 我需要像一組已連接的客戶端,以便我可以更具體地了解與streamWrite的對象。

這是我的服務器代碼,我正在從http://www.codeproject.com/Articles/511814/Multi-client-per-one-server-socket-programming-in復制所有這些代碼

服務器代碼

static TcpListener tcpListener = new TcpListener(25000);

    static void Listeners()
    {
        Socket socketForClient = tcpListener.AcceptSocket();
        if (socketForClient.Connected)
        {
            Console.WriteLine("Client:"+socketForClient.RemoteEndPoint+" now connected to server.");
            NetworkStream networkStream = new NetworkStream(socketForClient);

            System.IO.StreamWriter streamWriter =
            new System.IO.StreamWriter(networkStream);
            System.IO.StreamReader streamReader =
            new System.IO.StreamReader(networkStream);


            Console.WriteLine("type your message to be recieved by client:");
            string theString2 = Console.ReadLine();
            streamWriter.WriteLine(theString2);
            Console.WriteLine(theString2);
            streamWriter.Flush();

            while (true)
            {
                string theString = streamReader.ReadLine();
                Console.WriteLine("Message recieved by client:" + theString);
                if (theString == "exit")
                    break;
            }
            streamReader.Close();
            networkStream.Close();
            streamWriter.Close();


        }
        socketForClient.Close();
        Console.WriteLine("Press any key to exit from server program");
        Console.ReadKey();
    }

    public static void Main()
    {
        tcpListener.Start();
        Console.WriteLine("************This is Server program************");
        Console.WriteLine("Hoe many clients are going to connect to this server?:");
        int numberOfClientsYouNeedToConnect = int.Parse(Console.ReadLine());
        for (int i = 0; i < numberOfClientsYouNeedToConnect; i++)
        {
            Thread newThread = new Thread(new ThreadStart(Listeners));
            newThread.Start();
        }
    }

如果要堅持使用原始TCP套接字,則可以將委托/處理程序等傳遞給線程:

for (int i = 0; i < numberOfClientsYouNeedToConnect; i++)
{
     Thread newThread = new Thread(new ParameterizedThreadStart(Listeners));
     newThread.Start(i);
}

然后,您的偵聽器需要獲取一個object以匹配ParametrizedThreadStart 請參見MSDN。

但是,如果您正在開發兩端(如我所評論),那么我建議針對這種情況使用諸如ASP.NET SignalR之類的更抽象的東西。 它增加了一些開銷,但是您可以在方便抽象的級別上獲得服務器到客戶端的通信,反之亦然。

暫無
暫無

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

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