套接字socket函数详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、创建套接字---socket()
SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
原型:
socket(
_In_int af,//通信发生的区域
_In_int type,//socket类型
_In_int protocol//该套接字使用的特定协议
);
二、绑定本地址和端口----bind()
原型:
bind(//没错返回0,否则返回SOCKET_ERROR
_In_SOCKET s,//套接字描述符
_In_reads_bytes_(namelen) const struct sockaddr FAR * name,//name是赋给套接字的本地地址名字,长度可变,结构随通信域不同而不同
_In_int namelen//表明name的长度
);
三、建立套接字连接-----connect()与accept()
原型:
int PASCAL FAR connect (
_In_ SOCKET s,//本地套接字描述符
_In_reads_bytes_(namelen) const struct sockaddr FAR *name,//name 指出说明对方套接字地址结构的指针
_In_ int namelen//表明name的长度
);
原型:
accept(//返回一个SOCKET类型的值,表示接收到的套接字的描述符,否则返回INVALID_SOCKET
_In_SOCKET s,
_Out_writes_bytes_opt_(*addrlen) struct sockaddr FAR * addr,//客户的地址_Inout_opt_int FAR * addrlen//客户方套接字地址的长度(字节数)
);
四、监听连接---listen()
listen()必须在accept()之前调用
原型:
listen(
_In_SOCKET s,//标识一个本地已经建立的尚未连接的套接字号
_In_int backlog//标识请求队列的最大长度,用于限制排队请求的个数,最大为5.没有错误此函数返回0,否则返回SOCKET_ERROR
);
五、数据传输与接收----send()与recv()
原型:
send(
_In_SOCKET s,//已经连接的的本地套接字描述符
_In_reads_bytes_(len) const char FAR * buf,//缓冲区指针
_In_int len,//buffer长度
_In_int flags//是否发送带外数据
);
recv(
_In_SOCKET s,//已连接的套接字描述符
_Out_writes_bytes_to_(len, return) __out_data_source(NETWORK) char FAR * buf,//接收缓冲区
_In_int len,//接收缓冲区长度
_In_int flags//指定传输控制方式,如是否接收带外数据
);
六、输入/输出多路复用---select()
用来检测一个或多个套接字的状态。
七、关闭套接字---closesocket()
原型:
closesocket(
_In_SOCKET s
);