代码之家  ›  专栏  ›  技术社区  ›  Falmarri

从套接字接收的python

  •  0
  • Falmarri  · 技术社区  · 15 年前

    所以我在Android模拟器上有一个简单的socket服务器。当我只向它发送数据时,它工作得很好。但是,如果我想将这些数据回送回Python脚本,它根本就不起作用。这是有效的代码:

    安卓:

    
    
    try {
                    serverSocket = new ServerSocket(port);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
    
    
                while (checkingForClients) {
    
                    try {
                        clientSocket = serverSocket.accept();
    
                        out = new PrintWriter(clientSocket.getOutputStream(), true);
                        in = new BufferedReader(new InputStreamReader(
                                clientSocket.getInputStream()));
    
                        line = null;
                        while ((line = in.readLine()) != null) {
                            Log.d("ServerActivity", line);
    
                            /* THIS IS THE LINE THAT DOESN'T WORK*/
                            //out.println(line);
                            handler.post(new Runnable() {
                                @Override
                                public void run() {
    
                                    if(incomingData == null){
                                        Log.e("Socket Thingey", "Null Error");
                                    }
                                    //out.println(line);
    
                                    incomingData.setText("Testing");
    
                                    incomingData.setText(line);
    
    
                                }
                            });
    
                        }
    
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
    
    
    

    蟒蛇:

    
    
    import socket 
    
    host = 'localhost' 
    port = 5000
    size = 1024 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((host,port)) 
    s.send('Hello, World!') 
    # data = s.recv(size) THIS LINE CAUSES PROBLEMS
    s.close() 
    print 'Received:' , data
    
    
    

    所以有2行注释。如果没有这些线条,它就工作得很好。但是如果我加入进来 s.recv(size) 在Python中,它只是冻结,我假设它等待接收到的数据。但问题是Android代码永远无法获取发送的数据。所以我不知道该怎么做。

    记住,我对python和sockets都是新手。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Alex Martelli    15 年前

    以确保您的所有数据 不用关闭套接字就可以发送,是吗? 使用 send 你的套接字方法——使用它 sendall 方法!看 the docs 对于 森德尔 ……

    与send()不同,此方法继续 将数据从字符串发送到 所有数据已发送或出错 发生。

    而那些 发送 在同一页的上方,说

    返回发送的字节数。 应用程序负责 检查所有数据是否已发送; 如果只有部分数据 传输,应用程序需要 尝试交付剩余的 数据。

        2
  •  1
  •   Justin    14 年前

    我遇到了一些问题,您的代码中遗漏了socket.shutdown():

    s.send('Hello, World!')
    s.shutdown(1)
    data = s.recv(size)
    s.close() 
    print 'Received:' , data
    

    你学到了新东西… 丹尼斯

        3
  •  0
  •   Mark Tolonen    14 年前

    Android代码正在读取行,因此您可能需要在python send字符串的末尾发送\n或\r\n。