我尝试从Android客户端连接我的Windows桌面java服务器。我正在跨平台工作。桌面服务器和桌面客户端使用相同的代码工作正常,但桌面服务器和Android客户端有一个有趣的问题。显式权限已设置。
桌面java服务器代码
ServerSocket serverSocket = new ServerSocket(tcp_port);
Socket link = null;
while(true) {
link = serverSocket.accept();
PrintWriter output = new PrintWriter(link.getOutputStream(),true); // flush true
BufferedReader input = new BufferedReader(new InputStreamReader(link.getInputStream()));
// step 1 password auth
String message = input.readLine(); // wait password
if(message.equals(password)) {
output.println("correct");
message = null;
message = input.readLine(); // wait udp port request
if(message.equals("UDP")) {
output.println(udp_port+"");
etc
.
.
Android客户端代码
Socket link = null;
link = new Socket(hostip,tcp_port);
PrintWriter output = new PrintWriter(link.getOutputStream(),true); // auto flush true
BufferedReader input = new BufferedReader(new InputStreamReader(link.getInputStream()));
while(true) {
// step1 send the password wait the response
output.println(password);
String message = input.readLine(); // password response
if(message.equals("correct")) {
output.println("UDP"); // request udp
message = null;
message = input.readLine();
udpport = Integer.parseInt(message);
etc
.
.
我的问题是相同的代码在java桌面客户端和Java桌面服务器上工作正常但是 当我尝试从Android客户端密码auth部件连接java桌面服务器工作正常,但
output.println(udp_port + “”);当我向服务器端发送数据时,它首先发送空字符串,然后发送我的值是什么错误?
message = null;
message = input.readLine(); // wait udp port request
if(message.equals("UDP")) {
它读取空字符串并跳转if语句但是如果我使用
message = null;
message = input.readLine(); // read empty string
message = input.readLine(); // read my data
if(message.equals("UDP")) {
statement works
答案 0 :(得分:0)
如果您在收到数据之前尝试读取数据,这是预期的行为 - 从远程系统接收时更有可能发生这种情况,但总是有必要允许这样做。
您的应用程序必须等到收集完整的消息,在这种情况下可能是通过循环readLine()调用,直到您收到非空消息。