Проблема с простым tcp \ ip клиент-сервером - PullRequest
0 голосов
/ 14 сентября 2011

Я пытаюсь написать простой tcp \ ip клиент-сервер.

вот код сервера:

 internal class Program
    {
        private const int _localPort = 7777;

        private static void Main(string[] args)
        {
            TcpListener Listener;
            Socket ClientSock; 
            string data;
            byte[] cldata = new byte[1024]; 

            Listener = new TcpListener(_localPort);
            Listener.Start(); 
            Console.WriteLine("Waiting connections [" + Convert.ToString(_localPort) + "]...");
            try
            {
                ClientSock = Listener.AcceptSocket(); 
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }
            int i = 0;

            if (ClientSock.Connected)
            {
                while (true)
                {
                    try
                    {
                        i = ClientSock.Receive(cldata); 
                    }
                    catch
                    {
                    }

                    try
                    {
                        if (i > 0)
                        {

                            data = Encoding.ASCII.GetString(cldata).Trim();

                            ClientSock.Send(cldata);
                        }
                    }
                    catch
                    {
                        ClientSock.Close(); 
                        Listener.Stop();
                        Console.WriteLine(
                            "Server closing. Reason: client offline. Type EXIT to quit the application.");
                    }
                }
            }
        }
    }

А вот код клиента:

void Main()
{
         string data; // Юзерская дата
            byte[] remdata ={ };
            TcpClient Client = new TcpClient();

            string ip = "127.0.0.1";
            int port = 7777;

            Console.WriteLine("\r\nConnecting to server...");
            try
            {
                Client.Connect(ip, port);
            }
            catch
            {
                Console.WriteLine("Cannot connect to remote host!");
                return;
            }
            Console.Write("done\r\nTo end, type 'END'");
            Socket Sock = Client.Client; 

            while (true) 
            {
                Console.Write("\r\n>");
                data = Console.ReadLine();
                if (data == "END")
                    break;
                Sock.Send(Encoding.ASCII.GetBytes(data)); 
                Sock.Receive(remdata);
                Console.Write("\r\n<" + Encoding.ASCII.GetString(remdata));
            }

            Sock.Close();
            Client.Close();
}

Когда я отправляю на свой сервер, я не могу получить ответный ответ.Sock.Receive (remdata) ничего не возвращает!Почему?

1 Ответ

3 голосов
/ 14 сентября 2011

Вы пытаетесь получить пустой буфер. Вы должны выделить буфер с разумным размером, а затем принять к сведению количество полученных данных:

byte[] buffer = new byte[1024];

...

int bytesReceived = socket.Receive(buffer);
string text = Encoding.ASCII.GetString(buffer, 0, bytesReceived);

(Кстати, довольно необычно использовать PascalCase для локальных переменных. Я также призываю вас , а не просто ловить исключение вслепую и не глотать исключения, не регистрируя их.)

...