• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++网络编程基础

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

标签(空格分隔): c++


建立socket

int socket(int domain,int type ,int protocol);

  • domain 通常为PF_INET,表示互联网协议(TCP/IP)
  • type 指定了Socket的类型 SOCK_STREAM(TCP),SOCK_DGRAM(UDP)
  • protocol 通常赋值为0

绑定socket

int bind(int scokfd,struct sockaddr *MyAddr,int AddrLen);

  • scokfd Socket()函数返回的Socket套接字

  • MyAddrr 指向含有本机IP地址及端口号的sockaddr类型的指针

    • sockaddr
    struct sockaddr{
        unsigned short as_family;//地址族,AF_xxx 
        char sa_data[14]; //14字节的协议地址
    }
    
      * **sa_family** 一般为*AF_INET*,代表TCP/IP
      * **sa_data** 包含socket的IP地址和端口号
    
    • sockaddr_in 这个结构更加通用,与socketaddr结构体类似,且他们的指针可以互相替代
        struct sockaddr_in{
            short int sin_family;//地址族
            unsignedshort int sin_port;//端口号
            struct in_addr sin_addr;//IP地址
            unsigned char sin_zero[8];//填充0,以与 struct sockaddr大小保持一致
        }
    
      * **sin_family** 必须设置为*AF_INET*
      * **sin_port** 端口号
      * **sin_addr** 一个unsigned long的IP地址
      * **sin)zero** 填充0,用于与sockaddr大小保持一致
    

注意sin_portsin_addr需要转换成网络字节优先顺序

建立连接

面向连接的客户端程序可以使用Connect函数来配置Socket,从而与远端服务器建立一个TCP连接,其函数原型为:
int connect(int sockfd, stuct sockaddr *serv_addr ,int addrlen);

  • sockfd socket()函数返回的socket套接字
  • serv_addr 包含远端主机的IP地址和端口号的指针
  • addrlen 远端地址结构的长度
  • 当连接失败时,返回-1,并且设置错误信息

监听

服务器端程序调用listern()函数使得socket处于一个别动监听的模式,并且为这个socket建立一个输入数据队列,将到达服务器的请求保存到此队列中,直到程序处理。
int listen(int sockfd, int backlog);

  • sockfd 调用socket()函数返回的socket套接字
  • backlog 指定在请求队列中允许的最大请求数
  • 缓存队列中的请求,等待accept处理

服务器端接收

建立好缓存队列后,服务器端程序可以调用accept()函数处理客户的连接请求。
int accept(int sockfd, void *addr, int *addrlen);

  • sockfd 被监听的socket套接字
  • addr 通常是一个指向sockaddr_in变量的指针,该变量用于存储提出连接请求的主机信息
  • addrlen 通常是一个指向值为sizeof(struct sockaddr_in)的整型指针变量

数据发送和接收

面向连接的数据发送

int send(int sockfd, const void *msg, int len, int flags);

  • sockfd 监听的套接字
  • msg 指向要发送的数据
  • len 以字节为单位的数据长度
  • flags 一般设置为0
  • 返回值为实际发送出去的字节数

面向连接的数据接收

int recv(int sockfd, void *buf, int len, int flags);

  • sockfd 监听的套接字
  • buf 存放接收数据的缓冲区
  • len 以字节为单位的数据长度
  • flags 一般设置为0
  • 返回值为实际接收到的数据

无连接的数据发送

int sendto(int sockfd, const void msg, int len, int flags, const struct sockaddr to, int tolen);
这个函数比
send()
函数多了两个参数

  • to 要发送数据到的目的主机的IP地址和端口号信息
  • tolen 通常别赋值为sizeof(struct sockaddr)
  • 返回值为实际发送出去的字节数

无连接的数据接收

int recvfrom(int sockfd, void *buf, int len, int flag, struct sockaddr from, int fromlen);
这个函数比
recv()
函数多了几个参数

  • from 是一个struct sockaddr类型的变量,保存数据来源主机的IP地址和端口号
  • fromlen 一般设置为sizeof(stuct sockaddr)
  • 返回值为实际接收到的数据

关闭socket

  • 停止socket上面的全部操作
    closesocket(sockfd);

  • 关闭socket上面的某一个操作
    int shutdown(int sockfd, int how);
    how有几个可选的值

    • 0:不允许继续接收数据
    • 1:不允许接续发送数据
    • 2:不允许继续发送和接收数据

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
python-LinuxC调用Python函数发布时间:2022-07-13
下一篇:
C#获取文件与文件夹默认图标[转]发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap