2011-12-04 9 views
2


要求に応じてサーバープログラムにカウンタが1つ増えます(クライアントに提供されるカウンタ値は複製できません)
クライアントプログラムは、カウンタをインクリメントしてインクリメントされた値を取得するようにサーバプログラムに要求します。
サーバプログラムは、一度に複数のクライアント(少なくとも5個)を処理できる必要があります
カウンタ値は、
C#を使用してTCPクライアントサーバーアプリケーションを実装する


私は彼はサーバーとクライアントアプリケーションを別々のプロジェクトに配置しています。サーバーを起動してからクライアントを起動すると、次の行のサーバープログラムはNullReferanceExceptionを返します。

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

私はC#で新しくなりました。クライアントがサーバーに接続し、増分値を取得する方法を知りたいと思います。 ここに自分のコードを添付しました。 ありがとうございます。それは1(クライアントのTcpStreamを)期待しながら

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(); 

     } 
    } 

答えて

3

あなたは引数なしでスレッドを開始しています。これに

listenThread.Start(); 

:この変更ところで

listenThread.Start(client); 

を、私はむしろlistenThreadよりも、そのスレッドclientThreadを呼びたいです。スレッドはリッスンしていない、クライアントに参加しています。

+0

ありがとうalot icktoofay :)それは働いた – SriniShine

関連する問題