简单的tcp \ ip客户端 - 服务器的问题

时间:2011-09-14 09:29:18

标签: c# .net networking tcp ip

我正在尝试编写简单的tcp \ ip client-server。

这是服务器代码:

 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 个答案:

答案 0 :(得分:3)

您正在尝试接收空缓冲区。您应该分配具有合理大小的缓冲区,然后记下收到的数据量:

byte[] buffer = new byte[1024];

...

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

(顺便说一句,将PascalCase用于局部变量有些不同寻常。我也敦促盲目地捕获异常,而不是在不记录异常的情况下吞下异常。)