Java Socket

Socket:基于TCP/IP的流套接字。
1,建立通信链路
(1))客户端创建Socket实例(包含本地地址,远程地址和端口号)(要经历TCP的三次握手后才算创建成功),创建失败抛出IOException
(2))服务端创建一个ServerSocke实例(只要端口号未被占用则一般就成功,在创建同时操作系统会为其配一个底层数据结构来包含指定监听的端口号和包含监听地址的通配符“*”,表示监听所有地址),创建完之后调用accept()进入阻塞等待客户端请求。
(3))当服务端接到一个新的请求时,服务端会为其创建一个新的套接字数据结构(包含请求的原地址和端口),并把这个数据结构关联到ServerSocket实例的一个未完成连接数据结构的列表中,等到与客户端进行3次握手后,这个服务端的Socket实例才会成功返回,才会将其从未完成列表中已到已完成列表中。
2,数据传输:
如上所述,当连接成功后,服务端和客户端都有一个socket实例,并且每个Socket都有一个InputStream和OutputStream用于交换数据。
数据传输过程:系统会在创建Socket对象时给InputStream和OutputStream分配缓存区,写入端将数据写入到OutputStream对应的SendQ队列中,该队列满时则会把数据转移到另一端的InputStream的RecvQ队列中,若RecvQ满了,则OutputStream的write方法会阻塞,直到RecvQ有足够空间容纳SendQ发送的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值