所以我在Android平板电脑上运行了一个TCP客户端,我在PC上运行了一个c ++服务器。
我将数据从平板电脑发送到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 :(得分:0)
我会尝试使用公开int read(char[] cbuf, int off, int len)
,因此您的代码将类似于:
char[] buffer = new char[256];
int count = read(buffer, 0, 256);
网络缓冲区的readline在典型的客户端服务器应用程序中不常使用。
答案 1 :(得分:0)
你正在读行,但你没有写它们。 writeBytes()只写那些字节。行以换行符结尾。 readLine()将阻塞,直到收到一个。