gpt4 book ai didi

c# - 使用 C# 实现 TCP 客户端服务器应用程序

转载 作者:行者123 更新时间:2023-11-30 22:33:17 25 4
gpt4 key购买 nike

我正在尝试实现一个客户端服务器应用程序,其中一个
服务器程序有一个计数器,根据请求加一(提供给客户端的计数器值不能重复)
客户端程序要求服务器程序递增计数器并获得递增的值
服务器程序应该能够同时处理多个客户端(至少 5 个)
如果有的话,计数器值应该由所有服务器线程共享


我在单独的项目中实现了服务器和客户端应用程序。当我开始运行服务器然后运行客户端时,服务器程序下面的行给出了 NullReferanceException。

NetworkStream netstream = ((TcpClient)client).GetStream();

我是 C# 的新手。我想知道客户端如何连接到服务器并获取增量值。我在这里附上了我的代码。提前致谢。

MyServer.cs

public abstract class MyServer
{

private static int port = 8080;
private static TcpListener listener;
private static Thread thread;
private static int clientId = 0;

static void Main(string[] args)
{

listener = new TcpListener(new IPAddress(new byte[] {127,0,0,1}),port);
thread = new Thread(new ThreadStart(Listen));
thread.Start();
}


private static void Listen()
{
listener.Start();
Console.WriteLine("Listening on: " + port.ToString());

while(true)
{
Console.WriteLine("Waiting for connection....");
Console.WriteLine("Client No: " + clientId);
TcpClient client = listener.AcceptTcpClient();
Thread listenThread = new Thread(new ParameterizedThreadStart(ListenThread));
listenThread.Start();
}
}

private static void ListenThread(Object client)
{

NetworkStream netstream = ((TcpClient)client).GetStream();
Console.WriteLine("Request made");
clientId = clientId + 1;
// String message = "Hello world";
byte[] resMessage = Encoding.ASCII.GetBytes(clientId.ToString());
netstream.Write(resMessage, 0, resMessage.Length);
netstream.Close();


}
}

我的客户端.cs

 class MyClient
{
static void Main(string[] args)
{
TcpClient tcpClient;
int port = 8080;
NetworkStream stream = null;

tcpClient = new TcpClient("127.0.0.1", port);
Console.WriteLine("Connection was established....");

stream = tcpClient.GetStream();

Byte[] response = new Byte[tcpClient.ReceiveBufferSize];
stream.Read(response,0,(int)tcpClient.ReceiveBufferSize);

String returnData = Encoding.UTF8.GetString(response);
Console.WriteLine("Server Response " + returnData);

tcpClient.Close();
stream.Close();

}
}

最佳答案

您在没有参数的情况下启动线程,而它需要一个参数(客户端的 TcpStream)。改变这个:

listenThread.Start();

为此:

listenThread.Start(client);

顺便说一下,我将调用该线程clientThread 而不是listenThread;线程没有在监听,它正在处理客户端。

关于c# - 使用 C# 实现 TCP 客户端服务器应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8373594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com