网络编程part2

时间:2024-07-18 18:50:23

网络接口
1、socket  套接字 ==》BSD socket ==》用于网络通信的一组接口函数。socket api  application interface
2、ip+port 地址+端口===》地址用来识别主机
     端口用来识别应用程序

UDP  用户数据报

特征: 无链接  不可靠 大数据

注意:
1、数据和数据之间有边界     
2、发的次数必须和收的次数相对应    并且收的长的不要少于发的字节不然后面的数据会被丢弃
3、recvfrom()  会阻塞 !
4、sendto() 不阻塞

127.0.0.1   是指自己

c/s模型          ----> client/serve模型
1、bs http https
      cs http,自定义协议
2、bs 功能相对简单
      cs 复杂
3、bs 客户端通用
      cs 客户端专用

p2p 模型

TCP

服务器端
socket()-----bind()------listen()----accept-----read()----write()---read()---close()
    
listen() 进入监听状态,看有没有人接入函数


TCP端
socket()---connect()----write()----read()----close()

TCP 有链接    ---- 在发送数据之前先进行链路的创建,链接两端再进行发送数据

SYN 标志位       ACK 应答          


三次握手     客户端先发出SYN 给服务器端,服务器端回复客户端
三次握手之后建立链接,两端开始发收数据
 
四次挥手     客户端先发出FIN信号 服务器先对之前的数据进行应答,然后滞后一点            点时间发出断开请求,并且对之前的数据进行应答。


------------------
可以一次性把数据全拿走  没有边界  ,,发和收的次数不需要对应  (可以发三次收一次全收到)          //流式套接字   先发的数据一定在前面  收到的数据数取决于                    recv的个数
 
64k的内存
发的太多太快,套接字写满之后tcp会产生 写 阻塞/

tcp中有      双缓冲区
  发 和  收  分别在两个不同的空间里面。

流式套接字

数据有顺序
发送和接收的次数


套接字打开了两个   1、监听套接字
                                      1对多
                 2、通信套接字
                      1对1