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