2024年3月24日发(作者:)
Socket编程的基本流程包括:
socket()-创建Socket;bind()-将创建的Socket与本地端口绑定;
connect()与accept()-建立Socket连接;listen()-服务器监听是否有连接
请求;send()-数据的可控缓冲发送;recv()-可控缓冲接收;
closesocket()-关闭Socket。
一、WSAStartup函数
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
使 用Socket的程序在使用Socket之前必须调用WSAStartup函数。该
函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指
明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的
Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统
根据 请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket
库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其
它Socket函数了。该函数执行成功后返回0。
例:假如一个程序要使用2.1版本的Socket,那么程序代码如下
wVersionRequested = MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
也可以这样来用,WINSOCK_VERSION是默认的当前版本号
err = WSAStartup( WINSOCK_VERSION, &wsaData );
二、WSACleanup函数
int WSACleanup (void);
应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函
数来解除与Socket库的绑定并且释放Socket库所占用的系统资源。
三、socket函数
SOCKET socket(
int af,
int type,
int protocol
);
应 用程序调用socket函数来创建一个能够进行网络通信的套接字。
第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议
族,该参数置 PF_INET;第二个参数指定要创建的套接字类型,流套接
字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM;第三个
参数指定应 用程序所使用的通信协议。该函数如果调用成功就返回新
创建的套接字的描述符,如果失败就返回INVALID_SOCKET。套接字描
述符是一个整数类型的 值。每个进程的进程空间里都有一个套接字描
述符表,该表中存放着套接字描述符和套接字数据结构的对应关系。该
表中有一个字段存放新创建的套接字的描述符, 另一个字段存放套接
字数据结构的地址,因此根据套接字描述符就可以找到其对应的套接字
数据结构。每个进程在自己的进程空间里都有一个套接字描述符表但是
套 接字数据结构都是在操作系统的内核缓冲里。下面是一个创建流套
接字的例子:
struct protoent *ppe;
ppe=getprotobyname("tcp");
SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppe-〉
p_proto);
四、closesocket函数
int closesocket(
SOCKET s
);
closesocket 函数用来关闭一个描述符为s套接字。由于每个进程中都
有一个套接字描述符表,表中的每个套接字描述符都对应了一个位于操
作系统缓冲区中的套接字数据结构, 因此有可能有几个套接字描述符
指向同一个套接字数据结构。套接字数据结构中专门有一个字段存放该
结构的被引用次数,即有多少个套接字描述符指向该结构。当 调用
closesocket函数时,操作系统先检查套接字数据结构中的该字段的值,
如果为1,就表明只有一个套接字描述符指向它,因此操作系统就先把s
在 套接字描述符表中对应的那条表项清除,并且释放s对应的套接字数
据结构;如果该字段大于1,那么操作系统仅仅清除s在套接字描述符表
中的对应表项,并且把 s对应的套接字数据结构的引用次数减1。
closesocket函数如果执行成功就返回0,否则返回SOCKET_ERROR。
五、send函数
int send(


发布评论