android - Android Socket 连接到服务器但不写任何东西
问题描述
我目前正在 Eclipse 上运行服务器(本地 IP 192.168.1.255,监听端口 4567)。客户端可以连接 trought 套接字并发送消息,这些消息将由服务器打印在终端上。部分服务器代码如下:
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();
}
解决方案
您需要刷新PrintWriter
或将其构造为自动刷新。默认情况下它不是。
推荐阅读
- java - Largest consecutive subsequence, return subsequence and length
- regex - 在函数 decleration 上查找指定位置的值
- python - Python:在文件元素更改时停止while循环
- c++ - 多重继承:对具有不同签名的方法的模糊访问
- python - 如何屏蔽 Pandas 数据框的一行中的某些变量
- ios - 使用 metalkit 导出拼贴视频
- c# - StackOverFlow 异常:你能帮我解决这个问题吗?
- angular - 在overlayPanel in.ts 上做切换操作
- amazon-web-services - 如何在 terraform 中从不同区域获取 AWS 证书?
- spring-data - Springdata elasticsearch 对 scaled_float 字段类型的支持