21xrx.com
2024-12-22 21:52:40 Sunday
登录
文章检索 我的文章 写文章
C++中的sockaddr_in解析
2023-07-08 10:29:19 深夜i     --     --
C++ sockaddr_in 网络编程 IP地址解析 端口号解析

sockaddr_in是我们在C++中经常用到的一种数据结构,它是一个IPv4网络地址结构体,通常用于套接字编程中。在学习如何使用sockaddr_in之前,我们需要了解该结构体的结构和成员。

该结构体包含四个成员:sin_family、sin_addr、sin_port和sin_zero。其中,sin_family用于指定套接字地址家族,通常使用AF_INET表示IPv4地址;sin_addr用于指定IP地址,通常使用in_addr结构体类型;sin_port用于指定端口号,通常使用unsigned short类型;sin_zero用于将该结构体填充到与SOCKADDR结构体相同的大小。

最常用的使用方法是将sockaddr_in类型的结构体作为参数调用bind()和connect()函数。对于bind函数来说,它用于将一个套接字地址绑定到一个已经命名的套接字。对于connect函数来说,它用于建立一个连接。下面的代码演示如何绑定一个IP地址和端口号:


#include <iostream>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#include <cstring>

using namespace std;

int main() {

  int sock_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

  if (sock_fd < 0)

    cout << "socket error" << endl;

    return -1;

  

  struct sockaddr_in addr{};

  addr.sin_family = AF_INET;

  addr.sin_port = htons(8000); // 端口号

  addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // IP地址

  int ret = bind(sock_fd, (const struct sockaddr *) &addr, sizeof(addr));

  if (ret < 0) {

    cout << "bind error" << endl;

    close(sock_fd);

    return -1;

  }

  close(sock_fd);

  return 0;

}

在上面的代码中,socket函数创建了Socket,然后使用bind函数将IP地址和端口号绑定到Socket上。其中,使用了htons函数将主机字节序转换为网络字节序,inet_addr函数将点分十进制的IP地址转换为网络字节序的值。

总之,sockaddr_in结构体是我们在C++中经常使用到的一种网络地址结构体,可以方便地用于套接字编程中。学会使用sockaddr_in结构体,我们就可以更方便地进行套接字编程,实现网络通讯。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章