[英]Desktop server and android client local connection
我嘗試從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客戶端密碼驗證部分連接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
如果您嘗試在接收到數據之前先讀取數據,則這是預期的行為-從遠程系統接收數據時更有可能發生這種情況,但始終必須允許。
您的應用程序必須等待,直到收集到一條完整的消息為止,在這種情況下,可能是通過循環調用readLine()直到收到非空消息為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.