我当前正在Eclipse上运行服务器(本地IP 192.168.1.255,正在侦听端口4567)。客户端可以连接服务器套接字并发送消息,这些消息将由服务器打印在终端上。 服务器代码的一部分如下:
System.out.println("Client connected: " + clientName);
String line;
while (true){
line = in.nextLine();
System.out.println("STRING RECEIVED: " + line + " FROM " + clientName);
}
其中 in 是客户端套接字的输入流。
部分客户代码是:
while(true) {
System.out.print("\nEnter your input: ");
line = stdin.next();
socketOut.println(line);
socketOut.flush();
}
因此,例如,连接两个客户端的服务器终端上的可能输出如下:
Client connected: Socket[addr=/192.168.1.225,port=54852,localport=4567]
STRING RECEIVED: Hello FROM Socket[addr=/192.168.1.225,port=54852,localport=4567]
STRING RECEIVED: World FROM Socket[addr=/192.168.1.225,port=54852,localport=4567]
Client connected: Socket[addr=/192.168.1.225,port=54945,localport=4567]
STRING RECEIVED: Hello2 FROM Socket[addr=/192.168.1.225,port=54945,localport=4567]
一切正常,因此我现在正尝试在Android Studio上开发的简单应用程序上访问服务器槽式插槽。代码是:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new BackgroundTask().execute();
}
private class BackgroundTask extends AsyncTask {
@Override
protected Object doInBackground(Object[] params) {
try {
Socket socket = new Socket("10.0.2.2", 4567);
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println(new String("Hi from Android!"));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
}
但是输出只是
Client connected: Socket[addr=/192.168.1.225,port=55001,localport=4567]
没别的。
关于 println 的任何建议都不会发送任何东西吗?该程序在Eclipse的客户端/服务器端均可完美运行,因此我猜问题出在Android上。另外,我启用了Android网络权限,因此连接应该可以正常工作。
预先感谢大家。
编辑:已解决,我刚刚将Android客户端代码更改为:
try {
Socket socket = new Socket("10.0.2.2", 4567);
if (socket.isConnected()) {
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
String line = new String("Hi from Android!");
out.println(line);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
答案 0 :(得分:0)
您需要刷新PrintWriter
或将其构造为自动刷新。默认情况下不是。