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