2012-02-18 7 views
0

何か問題があると教えてください。また、このコードをデバッグしようとしていたことに注意してください。コードによっては余分なものでなくてもいいかもしれませんが、動作しないようにしてください。私は、その両側でconsole.writeを使用し、上記のsocket.read()しか示していないため、クライアントがメッセージを受信して​​いないことを知っています。私はこの2つのconsole.writeをこの投稿に残しました。C#クライアントがサーバーからメッセージを受信して​​いない、何が間違っているかわからない

サーバー:

class class1 
{ 
    static void Main(string[] args) 
    { 
       TcpListener serverSocket = new TcpListener(IPAddress.Any, info.Port); 
       TcpClient clientSocket = default(TcpClient); 
       serverSocket.Start(); 
       log.write(">> Listening for Clients\n"); 
       bool running = true; 
       while (running) 
       { 
        clientSocket = serverSocket.AcceptTcpClient(); 
        newClient client = new newClient(clientSocket,log); 
        Thread clientThread = new Thread(new ThreadStart(client.start)); 
        clientThread.Start(); 
      } 
    } 
} 

class Client 
{ 
     private clientType cType; 
     private EndPoint cIP; 
     private TcpClient socket; 
     private NetworkStream cStream; 

     public NetworkStream stream { get { return cStream; } } 
     public clientType Type 
     { 
     get 
       { 
      return cType; 
       } 
      set 
       { 
        cType = value; 
       } 
     } 
     public EndPoint IP 
     { 
     get 
       { 
        return cIP; 
     } 
       set 
       { 
        cIP = value; 
       } 
     } 

     public Client(TcpClient clientSocket) 
     { 
       socket = clientSocket; 
       cStream = socket.GetStream(); 

     } 
    } 

class newClient 
{ 
    Client client; 

    public newClient(tcpClient socket) 
    { 
     client = new Client(socket); 
    } 

    public void start() 
    { 
     loginObj loginRequest = new loginObj(); 
     BinaryFormatter formatter = new BinaryFormatter(); 
     MemoryStream memory = new MemoryStream(); 
     formatter.Serialize(memory, loginRequest); 
     byte[] tempOutBytes = new byte[10025]; 
     byte[] outBytes; 
     int numOfBytes = memory.read(tempOutBytes,0,tempOutBytes.Length); 
     outBytes = new byte[numOfBytes]; 
     for(int counter = 0; counter < nuOfBytes; counter++) 
      outBytes[counter] = tempOutBytes[counter]; 
     client.stream.Write(outBytes,0,outBytes.Length); 
     //Rest of code waits for respond but client never gets the message so rest of code is not needed 
    } 
} 

クライアント:

class network 
{ 
    private TcpClient socket = new TcpClient(); 

    public void start() 
    { 
     NetworkStream stream = socket.GetStream(); 
     MemoryStream memory = new MemoryStream(); 
     BinaryFormatter formatter = new BinaryFormatter(); 
     byte[] tempInBytes = new byte[10025]; 
     byte[] inBytes; 
     int numOfBytes = stream.Read(tempInBytes,0,tempInBytes.Length); 
     inBytes = new byte[numOfBytes]; 
     for(int counter = 0; counter < numOfBytes; counter++) 
      inBytes[counter] = tempInBytes[counter]; 
     memory.write(inBytes,0,inBytes.Length); 
     object msgObj = formatter.Deserialize(memory); 
     Type msgType = msgObj.GetType(); 

     if(msgType == typeof(loginObj)) 
     { 
      console.write("It works"); 
     } 
    } 
} 
+0

共通namin g規約:クラスフィールド名は小文字で始まります(あなたがした)、それと関連するプロパティは同じ名前(スペル)ですが、大文字で始まります。混乱要因を抑えます。 – radarbob

+0

おかげさまで、次回はそのことを覚えておきます。 – Shredder2500

答えて

1

サーバープログラム

using System; 
    using System.Net.Sockets; 
    using System.IO; 
    using System.Threading; 

    namespace Server 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       TcpListener server = new TcpListener(5000); 
       server.Start(); 
       Console.WriteLine("Server Started at {0}",DateTime.Now.ToString()); 
       while (true) 
       { 
        Socket client = server.AcceptSocket(); 
        Thread th = new Thread(ProcessSocket); 
        th.Start(client); 
       } 

      } 
      public static void ProcessSocket(object o) 
      { 
       Socket client = (Socket)o; 
       NetworkStream nws = new NetworkStream(client); 
       StreamReader sr = new StreamReader(nws); 
       while(client.Connected) 
       { 
        string s = sr.ReadLine(); 
        Console.WriteLine(" Message from {0} is :{1}", client.LocalEndPoint.ToString(), s); 
       } 
      } 
     } 
    } 

クライアントプログラム

using System; 
using System.Net.Sockets; 
using System.IO; 


namespace Client 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      TcpClient client = new TcpClient(); 
      client.Connect("IP/Hostname", 5000); 
      NetworkStream nws = new NetworkStream(client.Client); 
      StreamWriter sw = new StreamWriter(nws); 
      while (client.Connected) 
      { 
       Console.Write("your Message:"); 
       string s=Console.ReadLine(); 
       sw.WriteLine(s); 
       sw.Flush(); 
       Console.WriteLine("Message sent to server"); 
      } 

     } 
    } 
} 
関連する問題