![](/img/trans.png)
[英]Java websocket server receives not plain text when client sends strings
[英]Server/Android client receives/sends only once
我想將一串文本從Android手機發送到PC上運行的Java服務器,並且可以運行,但是只有一次,它會收到第一個字符串,但是當我在手機上鍵入另一個字符串並按下按鈕時,服務器什么也沒收到,(這是我的android應用代碼):
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
messsage = etMsg.getText().toString();
etMsg.setText("");
new Thread(new Runnable() {
@Override
public void run() {
try
{
client = new Socket(etIP.getText().toString(), port);
printwriter = new PrintWriter(client.getOutputStream());
printwriter.write(messsage);
printwriter.flush();
printwriter.close();
client.close();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}).start();
}
});
這是Java服務器的代碼:
package src;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class VRS {
public static void main(String[] args) throws IOException {
Socket clientSocket = null;
ServerSocket serverSocket = null;
try{
serverSocket = new ServerSocket(4444);
System.out.println("server started on port 4444");
clientSocket = serverSocket.accept();
}catch(Exception e){} //read & display the message
//BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
Scanner in1 = new Scanner(clientSocket.getInputStream());
String mes;
while(true){
if (in1.hasNext())
{
mes=in1.nextLine();
System.out.println("Client message :"+mes + System.lineSeparator());
}
}
}
}
我是Java的初學者,誰能幫助我發現問題。
服務器上的掃描程序正在等待帶有終結符的完整令牌,而您沒有從客戶端發送一個令牌。 嘗試在客戶端附加一個行結束符,例如
printwriter.println(messsage);
除此之外,似乎每次在客戶端單擊時都會創建一個新的Socket
對象。 但是服務器沒有在等待新的連接。 您可以:
Socket
,而不是為每次點擊都創建一個新Socket
。 例如,使您的client
變量成為類成員。 clientSocket = serverSocket.accept();
再次創建一個新的Socket
。 這個新的服務器端Socket
將與客戶端上的新套接字相對應。 第一種選擇被認為效率更高,尤其是當您要處理的連接和消息數量增加時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.