java - 来自套接字的 InputStream 和 OutputStream 阻塞
问题描述
我正在尝试编写一个简单的聊天/服务器程序。目前,我只是在玩代码,因为我对一般网络知之甚少,这只是一种希望学习新东西的实验,然后也许我会制作两个以上的 main() 函数. :)
但是,我遇到了客户端和服务器有点……停止的问题?我相信这被称为“阻塞”(你可以说我是 comp sci 的新手)。客户端应该向服务器发送消息,服务器应该读取消息,然后将其发回。但是在我输入消息后,双方都没有做任何事情。这是我的客户端:
public static void main(String[] args) {
try {
System.out.println("Connecting");
Socket socket = new Socket(ip, port);
System.out.println("Connected! Type your msg:");
Scanner s = new Scanner(System.in);
String msg = s.nextLine();
socket.getOutputStream().write(msg.getBytes());
//if I remove this part, literally everything works
String str = new String(socket.getInputStream().readAllBytes());
socket.close();
System.out.println("Server sent back: " + str);
}
catch(IOException e) {
e.printStackTrace();
}
}
这是服务器版本:
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(6666);
System.out.println("Waiting for connection");
Socket client = server.accept();
System.out.println("Connected to " + client);
OutputStream out = client.getOutputStream();
InputStream in = client.getInputStream();
BufferedReader b = new BufferedReader(new InputStreamReader(in));
String line = b.readLine();
System.out.println("client typed " + line);
out.write((line + "\n").getBytes());
server.close();
System.out.println("All done!");
}
catch(IOException e) {
e.printStackTrace();
}
}
有任何想法吗?我似乎无法找到任何真正的解释来说明这段代码发生了什么以使其停止。需要明确的是,它没有崩溃,它没有完成运行,客户端只是进入“键入你的消息:”而服务器只是进入“连接到客户端”,然后什么也没有发生。
请帮助<3
解决方案
推荐阅读
- powershell - 如何在将两个哈希表与 Powershell 进行比较时选择特定的哈希表键和值?
- c# - 如何安装 Microsoft.Office.Tools.Excel?
- postgresql - 将 PostgreSQL 连接到现有的 GIS 地理数据库
- string - 替换 ksh 脚本中路径中的目录名称
- java - 数据 null onActivityResult
- emscripten - Emscripten - 如何从 C 到 JavaScript 获取 uint8_t 数组?
- python - 如何在一段文本中搜索单词列表,一旦找到,添加到字典
- ansible - 是否有将日期字符串转换为纪元的 ansible 函数
- keras - 如何在 keras 生成器中使用 NN?
- julia - 在 Julia 中使用 ForwardDiff 时限制函数签名