java - 同一个socket的输入流和输出流怎么看?
问题描述
您好,我正在研究服务器-客户端应用程序的示例,但我不明白客户端如何从服务器接收字符串。
服务器运行一个执行此操作的线程:
String seq = generateSequence(l); //random stuff
outSocket.println(seq);
在客户端类中有这样的代码:
String serverSeq = inSocket.readLine();
System.out.println(serverSeq);
和inSocket
和outSocket
在线程和客户端类中以相同的方式实现,具有:
inSocket = new BufferedReader(new InputStreamReader(socket.getInputStream()));
outSocket = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
socket
同样的对象在哪里,它是客户端的套接字
我的问题是为什么serverSeq
字符串正是seq
字符串?服务器在输出流中写入,客户端从输入流中提取,这不是两个不同的内存区域吗?
解决方案
那么问题实际上是我认为服务器的accept()
函数返回客户端的套接字,但它没有,它返回一个与客户端的套接字对话的新套接字,但它们是两个不同的对象,所以在客户端和服务器中都inSocket
引用outSocket
到两个不同的插座不是同一个。
服务器将字符串写入其输出流,然后进入客户端的输入流,这是非常合乎逻辑的,我理解服务器正在将字符串写入客户端的输出流,这没有任何意义。
推荐阅读
- scala - 使用 Akka 演员计算不同单词的数量
- excel - 在工作簿中找不到电子表格,即使该电子表格存在
- vuejs2 - vue.config.js tranpileDependencies 在从 Vue 提供服务时有效,但在构建 dist 时无效
- go - VSCode 和 Golang,如何仅调试我的代码?
- javascript - 有没有办法在没有 WebRTC 的情况下从客户端 A -> 服务器 -> 客户端 B 流式传输视频以进行一对多广播?
- mysql - 添加多个计数列的总数
- netlogo - NetLogo:计算问题或NetLogo如何工作的逻辑
- json - Mongojack:ObjectId 的无效十六进制表示
- json - 将 DASHBOARD 连接到 NODE-RED
- amazon-web-services - 通过 S3 和 SQS 事件触发消息传递变量值