接收循环时C#套接字挂起 - python作为套接字服务器

时间:2017-07-31 09:41:03

标签: c# python .net sockets

我熟悉C#,知道一些python。最近几天我正在学习这本书Programming Python, 4th Edition,并运行了最基本的套接字示例:echo-server.pyecho-client.py 它们在我的Windows上运行良好,python 3.x。

python服务器:

from socket import *
myHost = 'localhost'                           
myPort = 50007                          
sockobj = socket(AF_INET, SOCK_STREAM)       
sockobj.bind((myHost, myPort))
sockobj.listen(5)                            
while True:                                  
    connection, address = sockobj.accept()  
    print('Server connected by', address)   
    while True:
        data = connection.recv(1024)        
        if not data: break
        connection.send(b'Echo=>' + data)    
    connection.close()

现在我想在C#中学习socket,所以我写了一个C#.net framework 4.5 socket客户端,希望接收并显示echo-client.py做什么。 我从msdn获得了C#演示,并进行了一些重构以减少代码大小。

        public static void Main(string[] args)
    {
        string server = "localhost";
        int port = 50007;
        string request = "GET / HTTP/1.1\r\nHost: " + server +
            "\r\nConnection: Close\r\n\r\n";
        Byte[] sent = Encoding.ASCII.GetBytes(request);
        Byte[] recv = new Byte[256];
        IPHostEntry hostEntry = Dns.GetHostEntry(server);
        IPEndPoint ipe = new IPEndPoint(hostEntry.AddressList[1], port);
        Socket s =
            new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
        s.Connect(ipe);
        s.Send(sent, sent.Length, 0);
        int bytes = 0;
        string page = "recived:\r\n";
        //do
        {
            bytes = s.Receive(recv, recv.Length, 0);
            page = page + Encoding.ASCII.GetString(recv, 0, bytes);
        }
        //while (bytes > 0);
        Console.WriteLine(page);
        Console.WriteLine("result");
        Console.ReadKey();
    }

我的测试步骤:

  1. 如果我使用本地IIS设置网站,例如 http://localhost:801,然后上面的代码可以显示主页html 内容,这意味着我的C#代码正在运行。
  2. 运行echo-server.py,将C#代码的端口更改为50007,然后运行, 控制台没有输出,应用程序也没有退出,如果我在循环中放置一个断点,我可以看到循环只运行一次。 python服务器确实输出了一些日志,说C#正在连接。
  3. 注释while while循环(如代码中所述),这次输出与echo-client.py(预期)完全相同。
  4. 所以当我在使用while while循环时,我想知道出了什么问题?

0 个答案:

没有答案