TCP/UDP套接字编程

在网络编程中的核心就是套接字编程了,以下就给来介绍以下桃套接字编程的步骤,先来看一下所用到的背景知识:

  • IP地址:用于表示一台进行网络服务的主机,现在有IPV4,IPV6,以下编程都基于IPV4
  • 端口号:用来表示一台主机上进行网络服务的进程(uint16_t)
  • 网络字节序:不同的主机有可能字节序不同,为了统一,进行网络通信时,都转为网络字节序(大端)
  • 操作系统提供了一套接口供网络编程对网卡的操作,socket

socket编程分为TCP/UD两种,根据需求选择:

TCP优点:有连接、可靠传输、面向字节流、     缺点:传输效率低、数据粘包

UDP优点:传输效率快、不粘包                          缺点:不可靠

而我们都知道进行网络服务需要客户端和服务端(c-s),下面先来看一下较为简单的UDP:

UDP:

服务端步骤:创建套接字-----绑定地址信息------收/发数据-----关闭套接字

  1. 创建套接字失败返回-1,AF_INET代表用的是IPV4协议,SOCK_DGRAM是UDP格式

                   

                        

     2.绑定地址信息

                       

                        

                          

bind是为套接字 sockfd 指定本地地址 my_addr,my_addr 的长度为  addrlen  (字节)。而IPv4地址用sockaddr_in结构体表示,这个结构体中包含三部分信息:地址类型、端口号、IP地址。(对应上图)

  •  地址类型: AF_INET是IPV4的地址类型
  • 端口号:因为我们在linux中的main函数的参数传端口号和IP地址,接收的都是char类型的,所以用atoi转为int型,用htons转换为网络字节序代表端口,这个之前提过原因
  • IP地址:inet_addr是将我们常用的点分十进制形式的IP地址转换为网络字节序地址

    3.收/发数据 

       (1)接收数据recvfrom:用来接收远程主机经指定的socket传来的数据,并把数据传到由参数buffer指向的内存空间,参数lenth为可接收数据的最大长度.参数flags一般设0,addres是client的地址信息,addres_len是address的长度(字节),成功返回消息的字节数,失败返回-1.

                    

                   

        (2)发送数据sendto:message是要发送的消息,dest_addr是对端(client)的地址信息,失败返回-1

                   

                    

     4.关闭套接字:close(socket)

                                          这是一个完整的udp_server的demo

客户端步骤:创建套接字-----绑定信息(不主动)-----收/发数据------关闭套接字

                                          这是一个完整的udp_client的demo

TCP:

服务端步骤:创建套接字----绑定----监听-----accept------收/发数据-----关闭

       1.TCP中创建套接字和绑定,调用的接口是和UDP一样的,不过创建的时候第二个参数要是SOCK_STREAM,代表传输方式为数据面向字节流(TCP)

           

      2.监听:listen()表明套接字处于监听状态,等待请求来时完成三次握手后进行后续动作,backlog参数是表示同一时刻可以接收最多的连接数,一般不会设置为太大。

                  

                                     

    3.accept:在完成三次握手后,用accept处理其之后的行为,若没有链接上来,默认阻塞等待,address一般设置为NULL,代表不关心客户端的地址

      

                

                                              这是一个TCP服务器的demo

客户端步骤:创建套接字------connect----收/发数据------关闭套接字

1.connect:客户端用于连接到服务器上的接口,需要服务器的ip和端口号。

                                                                        这是一个TCP客户端的demo

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值