我想从我的Android手机上发送一串文字到我的电脑上运行的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的初学者。
答案 0 :(得分:0)
服务器上的扫描程序正在等待带有终结符的完整令牌,而您没有从客户端发送一个令牌。尝试在客户端添加一行终止字符,例如
printwriter.println(messsage);
除此之外,似乎客户端的每次点击都会创建一个新的Socket
对象。但是服务器没有等待新的连接。你可以:
Socket
,而不是为每次点击创建一个新的client
。例如使您的clientSocket = serverSocket.accept();
变量成为类成员。Socket
后,在服务器端创建新的Socket
。这个新的服务器端<link rel="stylesheet" type="text/css" href="/episerver/Shell/8.5.1.0/ClientResources/epi/themes/legacy/ShellCore.css">
<link rel="stylesheet" type="text/css" href="/episerver/Shell/8.5.1.0/ClientResources/epi/themes/legacy/ShellCoreLightTheme.css">
将对应于客户端上的新Socket。第一个选项被认为更有效,特别是当您想要处理的连接和消息数量增加时。