一、基于TCP(面向连接)的的Socket
1、服务器端
创建套接字
SOCKET socket(
int af, //参数af指定通信发生的区域:AF_UNIX、AF_INET、AF_NS等,而DOS、 WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址族与协议族相同。
int type, //参数type 描述要建立的套接字的类型。这里分三种:TCP,UDP,RAW
int protocol); //参数protocol说 明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。
绑定套接字到本地地址和端口上
int bind(
SOCKET s, //参数s是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。
const struct sockaddr* name, //参数name 是赋给套接字s的本地地址(名字),其长度可变,结构随通信域的不同而不同。
int namelen //namelen表明了name的长度.如果没有错误发生,bind()返回 0。否则返回SOCKET_ERROR。
);
将套接字设为监听模式,准备接受请求
int listen(
SOCKET s, //参数s标识一个本地已建立、尚未连接的套接字号,服务器愿意从它上面接收请求。
int backlog //backlog表示请求连接队列的最大长度,用于限制排队请求的个数,目前允许的最大值为5。如果没有错误发生,listen()返回0。否则它返回SOCKET_ERROR。
);
等待客户端请求,当接受连接请求后,返回一个新的对应于此次连接的套接字SOCKET accept( SOCKET s, struct sockaddr* addr, int* addrlen);
利用accept函数返回的套接字(里面有客户端的IP地址和端口号)进行通信-----发送信息
int send(
SOCKET s, //参数s为已连接的本地套接字描述符。
const char FAR* buf, //buf 指向存有发送数据的缓冲区的指针,其长度由len 指定。
int len, //
int flags //flags 指定传输控制方式,如是否发送带外数据等。
);
接受信息
int recv(
SOCKET s, //参数s 为已连接的套接字描述符。
char FAR* buf, //buf指向接收输入数据缓冲区的指针,其长度由len 指定。
int len,
int flags); //指定传输控制方式,如是否接收带外数据等。
等待另一客户端请求
关闭套接字
2、客户端
创建套接字
socket
向服务器发出连接请求
int connect( SOCKET s, const struct sockaddr FAR* name, int namelen);
进行通信
send 和 recv
关闭套接字
二、基于UPD(面向无连接)的socket
1、服务器端
创建套接字-----socket
绑定地址和端口------bind
数据处理------接收数据 int recvfrom(
__in SOCKET s,
__out char* buf,
__in int len,
__in int flags,
__out struct sockaddr* from,
__in_out int* fromlen
);
发送数据 int sendto(
__in SOCKET s,
__in const char* buf,
__in int