一个简易的实现全双工通信的 Socket Demo 程序。
推荐阅读:
ServerSocket connection
Java 网络编程精解之 ServerSocket 用法详解一
源码
先看两个封装类 Reader 、 Writer。
Reader接收输入值,生成OutputStream。Writer读入InputStream的值,打印到console上。
1 | package org.aeadt.learn; |
1 | package org.aeadt.learn; |
然后就是模拟服务器和客户机的ServerDemo 和 ClientDemo了。
- 首先建立 Socket 连接,服务端创建监听接口:
new ServerSocket(8000);,表示绑定接口 8000,如果绑定失败会抛出IOException。如果设为 0,则由 OS 任意分配端口(很少这么做)。 - 可能会有多个 Client 向 Server 发送连接请求,即执行
Socket s = new Socket("localhost", 8000);的程序。所以服务器会将请求先放入一个队列中(通常容量为 50,超过 50 后将拒绝连接)。 - 如果 Client 的请求被加入队列中,此时
new Socket()将会正常返回。 - Server 调用
accept()方法,从队列中取出连接请求,建立连接完成。 - 之后 Client 和 Server 可以通过
Reader和Writer工具完成细节通信。 - 此处还缺一个
close()的操作,略去不提。
1 | package org.aeadt.learn; |
1 | package org.aeadt.learn; |
