繁体   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