首先,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();
答案 0 :(得分:2)
客户正试图读取一条线。但是服务器没有发送printwriter.write(MsgToClient);
的行。更改为printwriter.write(MsgToClient + "\n");
以发送一行。
答案 1 :(得分:0)
请勿在客户端代码中关闭输出流,请删除此行:
printwriter.close();
在连接处于活动状态之前,不应关闭流。完成套接字后,应该在结束时关闭它。关闭连接也将关闭与之关联的流。
以下是关于getOutputStream方法的小描述。
的getOutputStream
public OutputStream getOutputStream()throws IOException返回一个 此套接字的输出流。如果此套接字具有关联 然后,结果输出流委托它的所有 对渠道的操作。如果频道处于非阻塞模式则 输出> stream的写操作会抛出一个 IllegalBlockingModeException异常。
关闭返回的OutputStream将关闭相关的套接字。
返回:用于将字节写入此套接字的输出流。抛出: IOException - 如果在创建输出流时发生I / O错误 或者如果插座未连接。
答案 2 :(得分:0)
我在评论的帮助下解决了这个问题。
我在客户端删除了printwriter.close();
。
然后我在发送消息之前在客户端和服务器中添加了\n