socket 网络编程

2018-08-19  本文已影响0人  cendechen

API整理

int socket(int domain, int type, int protocol)
参数 类型 说明
domain 确定套接字的通信领域(domain) IPV4(AF_INET),IPv6(AF_INET6)
type 决定套接字数据传输的意义 SOCK_STREAM可靠,SOCK_DGRAM
protocol 指定端到端的协议 IPPROT_TCP.IPPROTO_UDP

链接

int connect(int socket, const struct sockaddr *foreignAddress, socklen_t addressLength)

绑定端口

int bind(int socket, struct sockaddr * localAddress, socklen_t addressSize)

处理进入的连接

int listen(int socket, int queueLimit)

接受同意的accept

int accept(int socket, struct sockaddr *clientAddress, socklen_t * addressLength)

发送

ssize_t send(int socket, const void *msg, size_t msgLength, int flags)
ssize_t recv(int socket, void *rcvBuffer, size_t bufferLength, int flags)

通用地址

struct sockaddr {
  sa_family_t sa_family;
  char sa_data[14];
}

ipv4 地址

struct in_addr {
  unit32_t s_addr; 
}
struct sockaddr_in {
  sa_family_t sin_family;
  in_port_t sin_port;
  struct in_addr sin_addr;
  char sin_zero[8];
}

ipv6的地址

struct in_addr {
 unit32_t s_addr[16];
}
struct sockaddr_in6 {
   sa_family_t sin6_family;
  in_port_t sin6_port;
  unit32_t sin6_flowinfo;
  struct in6_addr sin6_addr;
  uint32_t sin6_scope_id;
}

绑定地址时,用sockaddr 强制把 ipv4 和ipv6 强制转化

2进制/ 字符串地址转换

int inet_pton(int addressFamily, const char *src, void *dst)
// addressFamily 地址协议组
// src 需要转化的地址
// dst 储存转化成功的地址

const char * inet_ntop(int addressFamily, const void *src, char *dst, socklen_t dstBytes)
// addressFamily 地址协议组
// src 指向包含要转化的数字地址的内存块的第一个字节
// dst 参数包含调用者的空间中分配的缓冲区,把得到的字符串复制到其中
上一篇 下一篇

猜你喜欢

热点阅读