2010-07-27 51 views
0

所以我有一个简单的套接字服务器在Android模拟器上。当我只向它发送数据时,它工作得很好。但是,如果我想将这些数据回显给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注释行。没有这些线,它完美的作品。但是,如果我在Python中添加s.recv(size),它就会冻结,我假设等待接收到的数据。但问题是,android代码永远不会获取发送的数据。所以我不知道该怎么做。

请记住,我是新来的python和套接字。

回答

4

要确保所有数据的实际确实被发送,而无需关闭套接字,不要使用send方法您的插座 - 使用其sendall方法来代替!看看the docssendall ...:

不同的send(),这个方法继续 从字符串发送数据,直到 所有数据已发送或错误 发生。

而那些为send,略高于在同一个页面,说

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

1

我有一些问题,你错过了socket.shutdown()在你的代码:

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

你学到新的东西...... 丹尼斯

0

Android的代码读取行,所以你可能需要在Python发送字符串的末尾发送一个\ n或者\ r \ n。