2012-05-18 71 views
3

数据所以,我有上Androidt平板电脑上运行TCP客户端,和我有一个C++服务器的PC上运行。TCP客户端无法从服务器读取

我从我的平板电脑将数据发送到PC和PC可以读取它们就好了,但是当PC试图发送回一个消息到平板电脑,平板电脑只得到什么。它陷在readLine()尝试读取内容的电话中。

因此,这里的Java方法发送,然后等待响应

@Override 
protected Void doInBackground(Void... arg0) 
{ 
    String msg = ""; 
    Socket socket = null; 
    DataOutputStream outToServer = null; 
    BufferedReader msgFromServer = null; 
    try 
    { 
     // Socket used for I/O with the server 
     socket = new Socket("192.168.20.100", 48501); 

     // Writing to the server 
     outToServer = new DataOutputStream(socket.getOutputStream()); 

     // Reading from the server 
     msgFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     DataInputStream iStrReader = new DataInputStream(socket.getInputStream()); 

     // Initial comm 
     outToServer.writeBytes("MainCamConnect"); 

     msg = msgFromServer.readLine(); // Get stuck here 
     Log.d("NETWORK", msg); 

     socket.close(); 

    } 
    catch(UnknownHostException e) 
    { 
     e.printStackTrace(); 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 

    return(null); 
} 

和消息我从PC发送是这样的:“StartDelayTest \ n”

我知道服务器可以发送消息就好了,因为我有一个简单的C++ TCP客户端测试,它工作得很好,但是当我在平板电脑上运行它,平板电脑不能得到任何

编辑:

操作系统:Windows 7 64位专业版

编辑2:

我已经在我的电脑上运行Wireshark的,我可以确认的数​​据包被发送到正确的IP地址,所以这个问题确实是在接收端(Android应用程序)

+0

在PC上的操作系统? – Tudor

+0

的Windows 7 64位专业版 – nevero

+1

你可能想尝试从插座InputStream里读入的原始字节,和/或阅读这样一种方式,不等待,直到它接收''\ n'',你提到的行为听起来像是一个编码问题。 –

回答

0

我会尝试使用公共int read(char[] cbuf, int off, int len)代替你的代码将是这样的:

char[] buffer = new char[256]; 
int count = read(buffer, 0, 256); 

网络缓冲区的readline不典型的客户机SERV经常使用呃应用。

+0

我试过了,但没有改变结果 – nevero

+0

尝试将缓冲区更改为一个字符。看看是否改变了一切。 –

0

您正在阅读行,但你是不是写他们。 writeBytes()只是写这些字节。行以换行符结束。 readLine()会阻塞,直到收到一个。