簡體   English   中英

桌面服務器和android客戶端本地連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM