簡體   English   中英

我無法從服務器端套接字讀取

[英]I Can't read from the server-side socket

首先,Android應用程序將連接到服務器(PC)。 然后,Android將發送一條消息。 最后,Android應用程序應從服務器收到消息。

當我從android向服務器發送消息時,一切順利。 但是,當涉及到從android應用程序內的套接字讀取時,我什么也收不到。

這是服務器代碼

    ServerSocket Sock = new ServerSocket(7777);
    System.out.println("Waiting for connection...\n");
    Socket connectionSocket = Sock.accept();
    System.out.println("Client In...");
    BufferedReader inFromClint = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
    PrintWriter printwriter = new PrintWriter(connectionSocket.getOutputStream());
    String txt = inFromClint.readLine();
    System.out.println(txt);
    String MsgToClient = "{\"LoginFlag\":\"N\"}";  //{"LoginFlag":"P"}
    printwriter.write(MsgToClient);
    printwriter.flush();
    printwriter.close();
    System.out.println("\nMsg Sent");
    Sock.close();

這是Android應用程序的示例:

new Thread(new Runnable() {
    @Override
    public void run() {
       try
          {
             BufferedReader bufferedReader = null;
             PrintWriter printwriter = null;
             port = 7777;
              client = new Socket("192.168.1.2", port);
              printwriter = new PrintWriter(client.getOutputStream());
              printwriter.write(SMsgLog);
              printwriter.flush();
              printwriter.close();
              bufferedReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
              if( bufferedReader.ready() )
              {
                  RJasonLog = bufferedReader.readLine();   //rcv as jason
              }
              else
              {
                 RJasonLog = null;
              }
              if (RJasonLog != null)
              {
                 JSONObject objectRcv = new JSONObject(RJasonLog);
                  if (objectRcv != null)
                  {
                     RMsgLog = objectRcv.getString("LoginFlag");  //Jason Key from the server
                   }
               }
               RMsgLog = "N";
               if(RMsgLog.equals("N"))
               {                                     
                  alert.showAlertDialog(Login.this, "Login failed..", "Username/Password is incorrect", false);
               }
                else
                      alert.showAlertDialog(Login.this, "Login failed..", "Please Try Again", false);


               client.close();
           }

           catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
     }
 }).start();

客戶正在嘗試讀取一行。 但是服務器沒有通過printwriter.write(MsgToClient);發送一行printwriter.write(MsgToClient); 更改為printwriter.write(MsgToClient + "\\n"); 發送一條線。


我在評論的幫助下解決了它。

我刪除了printwriter.close(); 在客戶端。

然后在發送消息之前,我在客戶端和服務器中都添加了\\n


不要關閉客戶端代碼中的輸出流,請刪除此行:

printwriter.close();

連接保持活動狀態之前,不應關閉流。 完成插槽操作后,應將其關閉。 關閉連接還將關閉與之關聯的流。

這是有關getOutputStream方法的簡短描述。

getOutputStream

public OutputStream getOutputStream()throws IOException返回此套接字的輸出流。 如果此套接字具有關聯的通道,則結果輸出流會將其所有操作委托給該通道。 如果通道處於非阻塞模式,則輸出>流的寫操作將引發IllegalBlockingModeException。

關閉返回的OutputStream將關閉關聯的套接字。

返回:用於將字節寫入此套接字的輸出流。 拋出:IOException-如果在創建輸出流時發生I / O錯誤,或者未連接套接字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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