传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。
创建套接字:socket ( )
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
domain: 域,范围,区域
AF_UNIX,: linux进程内部通信
AF_INET ,用于ipv4通信
AF_INET6,用于ipv6通信
type:
SOCK_STREAM, TCP专属,提供面向连接 字节流 安全可靠服务
SOCK_DGRAM, UDP专属
SOCK_RAW , 自己实现一套接口
protocol: 为0即可
返回值:
成功: 正数--新的连接socket
失败:-1,errno
绑定套接字:bind ( )
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
addr:应该包含ip和端口号
我们没有使用这个类型:
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
}
我们使用的是下面的类型:
struct sockaddr_in { man 7 ip
sa_family_t sin_family; 永远等于AF_INET. address family: AF_INET
in_port_t sin_port; 端口号以大端方式存放的 port in network byte order
struct in_addr sin_addr; internet address
};
Internet address.
struct in_addr {
uint32_t s_addr; IP地址,以大端方式存放 address in network byte order
};
addrlen: addr结构体长度
返回值:
成功:0
失败:-1,errno
注:int inet_addr(char *ip)负责将字符串表示的 点分法,转换为 u32,以大端方式存放
启动监听:listen ( )
#include <sys/types.h>
#include <sys/socket.h>
int listen(int sockfd, int backlog);
backlog: 主socket在一瞬间可以同时处理的客户端个数
一般选5,表示可以同时处理2*5+1
返回: