java - 服务器套接字不在 Java 中发回数据
问题描述
所以,我刚刚学会了如何socket
用 Java 制作 s 和所有这些好东西,所以我的第一次尝试得到了来自客户端的消息,然后客户端崩溃了。应该发生的是从客户端获取消息,如果该消息等于此消息,则将数据发回。但是,if
即使消息正确,消息是否正确的功能也不会触发。
即使我删除了if
检查字符串是否正确的函数,程序仍然冻结。顺便说一句,我的服务器是一个控制台应用程序,而我的客户端是一个 SWT 应用程序。
这是已删除if
功能的服务器代码:
try {
System.out.println("Waiting for a connection...");
// Start a server
ServerSocket server = new ServerSocket(3211);
// Listen for anyone at that port
Socket socket = server.accept();
System.out.println("The client has connected!");
// Get the data being sent in
DataInputStream inputStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
DataOutputStream ouputStream = new DataOutputStream(socket.getOutputStream());
// Turn that into UTF-8
String data = inputStream.readUTF();
System.out.println("Received " + data);
ouputStream.writeUTF("Great!");
System.out.println("Awesome!");
socket.close();
inputStream.close();
ouputStream.close;
server.close();
System.out.println("Socket closed\n-----------------------------");
}
catch(IOException e) {
System.out.println(e);
}
客户端(按下按钮时触发):
try {
allMessagesTextBox.setText(allMessagesTextBox.getText() + "\nConnecting to the server...");
Socket socket = new Socket("192.168.1.206", 3211);
allMessagesTextBox.setText(allMessagesTextBox.getText() + "\nConnected to the server!");
DataInputStream input = new DataInputStream(System.in);
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
output.writeUTF("sweet");
String data = input.readUTF();
allMessagesTextBox.setText(allMessagesTextBox.getText() + "\nSERVER: " + data);
input.close();
output.close();
socket.close();
}
catch (IOException er) {
allMessagesTextBox.setText(allMessagesTextBox.getText() + "\n" + er);
}
一旦我按下按钮尝试启动连接(服务器已经在运行),客户端就会立即冻结。它甚至不发送任何“连接到服务器”的东西。
知道出了什么问题,以及如何解决这个问题?
解决方案
您的客户正在阅读System.in
. 它应该从套接字输入流中读取。
注意你只需要关闭一个套接字的最外层输出流。如果需要,它会刷新它并关闭输入流和套接字。您目前不仅关闭了不必要的关闭,而且关闭了错误的顺序,
推荐阅读
- jquery - 我已经使用了此代码。但无法禁用某些文本框。那么,我怎样才能禁用某些文本框?
- sql - SQL根据另一个表条件创建虚拟列
- office-js - 使用 On-send 功能删除 HTML 电子邮件中的嵌入图像
- arduino - TCS34725 2 个月后停止
- javascript - 如何实时显示通过蓝牙从 Arduino 设备接收到的数据?
- groovy - 无需通过根元素即可获取特定 json 元素的方法
- node.js - 节点[43580]:pthread_create:资源暂时不可用
- linux - 从文件中提取特定范围的 fasta 序列
- amazon-s3 - AWS S3 存储桶 URL 到自定义域链接
- actions-on-google - Google 操作状态已部署但无法从其他设备访问