![](/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.