当前位置: 首页> 游戏> 攻略 > 【C++】Socket编程基础

【C++】Socket编程基础

时间:2025/7/9 8:17:57来源:https://blog.csdn.net/csdnabcaq/article/details/139358931 浏览次数:0次

文章目录

    • 套接字
      • 通信类型
      • 名空间
      • 套接字函数
        • socket():创建套接字
        • bind()函数:绑定服务器套接字与其地址、端口
        • listen()函数:侦听客户连接
        • connect():连接套接字
        • accept()函数:服务器接受连接,并为该连接创建一个新的套接字
        • send():发送数据
        • close():释放套接字

套接字

通信类型

   通信类型控制套接字如何传输和处理数据,数据以包的形式传输

  • 连接类型:确保所有包依序传输,丢包则重传
  • 数据报类型:不保证包的按序到达,可能会丢失

名空间

  • 本地名空间:套接字地址为普通地址名,使用在本地通信
  • 网络名空间:套接字地址由Internet地址和端口号(区分一台主机上多个套接字)确定,使用在网络通信

套接字函数

socket():创建套接字
  • 原型:int socket(int domain,int type,int protocal);
  • 参数:名空间、通信类型、协议
  • 名空间:PF_LOCAL(本地名空间)、PF_INET(网络名空间)
  • 通信类型:SOCK_STREAM(连接类型)、SOCK_DGRAM(数据包类型)
  • 协议:0,系统自动选择协议,有IPPROTO_TCP或IPPROTO_UDP
  • 返回值:套接字描述符
bind()函数:绑定服务器套接字与其地址、端口
  • 原型:int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 参数:sockfd为服务端创建的套接字文件描述符,addr指向一个地址结构包含服务器本身的地址以及端口号,addrlen为结构体addr的长度
listen()函数:侦听客户连接
  • 原型:int listen(int sockfd, int backlog);
  • 参数:sockfd为已绑定IP地址和端口号的套接字描述符、backlog指定有多少个挂起连接可以进入队列,超出该值的连接将被抛弃
connect():连接套接字
  • 创建两个套接字的连接,客户发起系统调用,申请与服务器建立连接
  • 原型:int connect(int sockfd,const struct sockaddr* addr,socklen_t addrlen);
  • 参数:sockfd为客户端创建的套接字文件描述符,addr指向一个地址结构包含服务器绑定的地址以及端口号,addrlen为结构体addr的长度
  • 返回值:0成功、-1失败
accept()函数:服务器接受连接,并为该连接创建一个新的套接字
  • 原型:int accept(int sockfd, struct sockaddr *addr, socklen_t addrlen);
  • 参数:sockfd为监听状态的套接字描述符、addr指向一个地址结构包含客户端的地址,addrlen为结构体addr长度
  • 返回值:成功返回新创建的、与客户端连接的套接字描述符,失败返回-1
  • 原先套接字文件描述符可以继续接受新连接
send():发送数据
  • 原型:ssize_t send(int sockfd, const void *buf, size_t len, int flags);
  • 原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addr_len);
  • 原型:ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
  • 只有在套接字处于连接状态时才可调用
close():释放套接字
  • int close(int fd);
关键字:【C++】Socket编程基础

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: