繁体   English   中英

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

[英]Problem with simple tcp\ip client-server

我正在尝试编写简单的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)什么也不返回! 为什么?

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

byte[] buffer = new byte[1024];

...

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

(顺便说一下,对局部变量使用PascalCase有点不合常规。我还敦促您不要盲目地捕获Exception,不要在不记录它们的情况下吞下异常。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM