套接字
操作系统管理的进程的套接字表,每一个进程拥有一张套接字表
套接字有两种一种是被动套接字(作为Server时),一种是活动套接字(作为Client时)。
TCP/IP 协议族 常量 PF_INET =2
TCP/IP 地址族 常量 AF_INET =2
套接字端点地址一般数据结构
struct sockaddr{ //一般结构定义
u_short sa_family; //地址族
char sa_data[14]; //地址
};
套接字端点地址的精确数据结构定义
struct sockaddr_in{
u_short sin_family; //地址类型,值一直都是AF_INET
u_short sin_port; //端口号
struct in_addr sin_addr; //IP地址
char sin_zero[8]; //没用的,常为0
};
只是使用了TCP/IP协议的程序只需要使用sockaddr_in结构,sockaddr结构只是用来强制类型转换通过编译器的编译。
套接字函数
WSAStartup
使用套接字前必须调用的函数
WSACleanup
结束使用套接字关闭释放套接字的函数
Socket
创建一个套接字
connect
客户端调用此函数来和服务端连接
send
发送数据
recv
接收函数
closesocket
关闭套接字并释放,如果多个进程共享套接字,引用-1,当引用为0的时候释放套接字
bind
指定套接字的本地端点地址和端口
listen
Server用来监听传入连接,套接字被设定为被动模式
accept
获得连接,如果一直没有获得连接则一直阻塞
套接字调用模式
客户端:
WSAStartup->socket->connect->send->recv->closesocket->WSACleanup
服务端:
WSAStartup->socket->bind->listen->accept->recv->send->closesocket->WSACleanup
getsockname 得到socket本地端口信息