2
我試圖實現這一個
Server程序具有通過一個根據要求(提供給客戶端沒有計數器值可以被複制)
遞增計數器的客戶端服務器應用程序一個TCP客戶端服務器應用程序 客戶端程序要求服務器程序遞增計數器並獲得增加的值
服務器程序應該能夠一次處理多個客戶端(至少5個)
計數器值應該由所有服務器線程共享(如果有)
實現用C#
我已經實現了t他服務器和客戶端應用程序在單獨的項目。當我開始運行服務器,然後客戶端服務器程序下面的行給出了一個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();
}
}
MyClient.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();
}
}
非常感謝icktoofay :)它的工作 – SriniShine