网络编程基础(一)
TCP服务器和客户端的创建
服务器
获得套接字标识符socket_fd
int socket(int domain, int type, int protocol);
/*int domain 为传输协议 TCP一般用AF_INET IPv4 Internet protocols IPV4网络协议
AF_INET6 IPv6 Internet protocols IPV6网络协议(需要收费)
int type 为传输形式 TCP 用SOCK_STREAM 以数据流的方式传输
int protocol 套接字选项 一般形式为0
成功返回 标识符socket_fd
失败返回 -1 和错误码*/
绑定套接字并将自己ip、端口号、传输协议广播
bind(int socket_fd,const struct sockaddr* addr,socklen_t len)
/*int socket_fd 为上面获得的套接字
const struct sockaddr* addr 为存放ip、端口、传输协议等信息的通用结构体
socklen_t len 为结构体的长度*/
TCP/IP IPV4专用的结构体
struct sockaddr_in
{
int sa_len; //长度单位,不必设置,通常情况下固定长度为16字节
short int sa_family; //地址族
unsigned short int sin_port; //端口号
struct in_addr sin_addr; //IP地址
unsigned char sin_zero[8]; //填充0以保持与struct sockaddr同样大小
};
struct sin_addr
{
in_addr_t s_addr; //32位IPv4地址,网络字节序
}
绑定成功后开始监听
listen(int socket_fd,int backlog)
/* socket_fd 为套接字标识符
backlog 为最大连接数,超过则会发送错误码ECONNREFUSED
成功:0 失败:-1 */
开始接收消息
accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen)
/* socketfd 为套接字标识符
struct sockaddr* addr 为一种通用的套接字结构类型,以供不同的协议调用
替换成struct sockaddr_in (TCP/IP协议)
socklen_t* addrlen 为长度指针
成功:客户端套接字标识 失败:-1*/
最后就是创建一个内存接收消息并读取
客户端
先获得套接字
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
/* int sockfd 为套接字
const struct sockaddr *addr 存放服务器各种ip、端口号、传输协议信息
IPV4 用struct sockaddr_in替换
socklen_t addrlen
成功返回 0
否则返回-1,错误码
最后就是创建一个内存接收消息并读取