2012-02-18 5 views
0

무엇이 잘못되었는지 알려주세요. 또한이 코드를 디버깅하려고 시도 했으므로 일부 코드가 추가로 필요하지는 않지만 작동하지 않도록해야합니다. 나는 그것의 양쪽에 console.write를 사용했기 때문에 클라이언트가 메시지를받지 못한다는 것을 안다. socket.read() 만 보았다. 나는이 두 콘솔을 남겨 뒀다.이 포스트에 써라.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"); 
      } 

     } 
    } 
} 
관련 문제