java - Java 线程套接字(PrintWriter 和 BufferedReader)
问题描述
我正在尝试只使用两个类——ServerSocket 和 Socket 创建一个游戏。一切都必须在 TCP(而不是 UDP)上,而架构必须是 P2P。这个游戏的运作方式是一个玩家选择一个数字,然后另一个玩家选择一个数字,然后从其中一个(无论哪个)开始倒计时。我遇到了一个问题。我在两个客户端之间建立了连接,并且两者都可以输入选定的号码。我不知道为什么我不能将此号码发送给另一个客户。是Socket不能同时发送和接收消息的问题吗?我读过有可能使用两个单独的线程(一个接收数据,另一个发送)来执行此操作,但我不知道具体如何。
@Override
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(System. in ));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
System.out.println("PICK A NUMBER:");
while (!br.ready()) {
Thread.sleep(500);
}
Integer numberGamePicked = Integer.parseInt(br.readLine());
Thread.sleep(500);
out.println(numberGamePicked);
Thread.sleep(1000);
BufferedReader in =new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
int whatOpponentSend = Integer.parseInt( in .readLine());
System.out.println("RECEIVED " + whatOpponentSend);
}
当然,到目前为止,一切都在 run() 方法中。是他们两个同时执行相同的代码的问题吗?
解决方案
推荐阅读
- c++ - 重载运算符 << 后打印二维数组
- c++ - 给 enum 一个 int 数并在 c++ 中将其相关值作为字符串获取
- python-3.x - 将 Pandas df 中的数据提取到列表中
- sql - 在 Bigquery 中使用 REGEXP_EXTRACT 查找破折号之间的字符串
- unity3d - 缩放水平布局组的子布局元素,同时保持它们的纵横比
- c++ - std::ifstream::open 不一致失败
- python - 优化一个参数,使输出位于两点之间
- python - 返回一个包含每家公司最高销售额的完整行的 python DataFrame
- azure - k8s 无法访问数据库
- flutter - 无法将 google_sign_in 添加到 Flutter 项目,包需要旧版本的 Flutter SDK?