TCP和UDP编程的学习

UDP编程特点:c/s模型

不可靠 ; 无链接 ;数据报形式(效率高);

TCP编程特点:

面向链接; 可靠传输;(保证数据准确可靠); 面向字节流;

ssize_t recvfrom(int sockfd,       socket的fd

                  void *buf,  保存数据的一块空间的地址

                             size_t len,   这块空间的大小

                              int flags,   0  默认的接收方式 --- 阻塞方式

  struct sockaddr *src_addr,    用来保存发送方的地址信息

         socklen_t *addrlen   表示发送方实际的地址信息大小

               );

返回值:

   成功 返回接收到的字节数

   失败  -1

2、int bind(int sockfd, struct sockaddr *my_addr,

             socklen_t addrlen);

功能:如果该函数在服务器端调用,则表示将参数1相关

         的文件描述符文件与参数2 指定的接口地址关联,

         用于从该接口接受数据。

         如果该函数在客户端调用,则表示要将数据从

         参数1所在的描述符中取出并从参数2所在的接口

         设备上发送出去。

注意:如果是客户端,则该函数可以省略,由默认接口发送数据。

参数:sockfd 之前通过socket函数创建的文件描述符,套接字id

         my_addr 是物理接口的结构体指针。表示该接口的信息。

绑定地址:运行所在主机上的地址;服务器程序所在的程序;

基于TCP客户——服务器程序的套接字服务:

TCP建立连接:TCP的三次握手过程;

断开链接: TCP的四次回收;

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

1、int connect(int sockfd, const struct sockaddr *addr,

                   socklen_t addrlen);

   功能:该函数固定有客户端使用,表示从当前主机向目标

             主机发起链接请求。

   参数:sockfd 本地socket创建的套接子id

          addr 远程目标主机的地址信息。

               addrlen: 参数2的长度。

   返回值:成功 0

               失败 -1;

struct sockaddr *addr //通用地址结构类型,并没有实际去用,实际用到都是具体地址结构类型

struct sockaddr_in {

               sa_family_t    sin_family; /* address family: AF_INET */

               in_port_t      sin_port;   /* port in network byte order */

               struct in_addr sin_addr;   /* internet address */

           };

           /* Internet address. */

           struct in_addr {

               uint32_t       s_addr;     /* address in network byte order */

           };

关于三次握手:

三次握手的目的就是为了确保双方的连接正常

第一次握手:客户端向服务器发送;证明客户端的发送正常;

第二次握手:服务器接收到客户端的发送,并向客户端发送;证明服务器的接收、发送能力正常;

第三次握手:客户端向服务器发送,证明客户端的接收能力正常;

关于四次挥手:

  1. 首先客户端想要释放连接,先向服务器发送;
  2. 服务器收到客户端的发送后,确认客户端想要释放连接,
  3. 服务器向客户端发送自己也要释放连接的消息;
  4. 客户端接收到服务器要释放连接的消息,向服务器发送收到的消息;

完成四次挥手;

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCPUDP是传输层的两种协议,它们在编程时有一些区别。 TCP编程是基于连接的。在TCP编程中,服务器和客户端需要先建立一个连接,然后才能进行数据传输。TCP提供可靠的、面向连接的数据传输,它保证数据的顺序和可靠性。TCP编程适用于需要可靠传输和顺序传输的应用场景,例如文件传输、网页浏览等。 而UDP编程是面向无连接的。在UDP编程中,服务器和客户端之间不需要先建立连接,可以直接进行数据传输。UDP提供不可靠的、无连接的数据传输,它不保证数据的顺序和可靠性。UDP编程适用于对实时性要求较高、数据传输较少的应用场景,例如音频和视频传输、实时游戏等。 总结起来,TCP编程提供可靠的、面向连接的数据传输,适用于对数据可靠性和顺序性要求较高的应用场景;而UDP编程提供不可靠的、无连接的数据传输,适用于对实时性要求较高的应用场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Linux 网络编程 TCP/UDP编程](https://blog.csdn.net/weixin_45649201/article/details/126392509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [浅谈java的TCPUDP编程(附实例讲解)](https://download.csdn.net/download/weixin_38656400/12779442)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值