一个简易的实现全双工通信的 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; |