大凡在WIN32平台上的WINSOCK编程都要经过下列步骤: 定义变量->获得WINDOCK版本->加载WINSOCK库->初始化->创建套接字->设置套接字选项->关闭套接字->卸载WINSOCK库->释放资源 下面介绍WINSOCK C/S的建立过程: 服务器 客户端 ________________________________________________ 1 初始化WSA 1 初始化WSA ____________________________________________________ 2 建立一个SOCKET 2 建立一个SOCKET _____________________________________________________ 3 绑定SOCKET 3 连接到服务器 _____________________________________________________ 4 在指定的端口监听 4 发送和接受数据 _____________________________________________________ 5 接受一个连接 5 断开连接 ______________________________________________________- 6 发送和接受数据 ___________________________________________________ 7 断开连接 __________________________________________________ 大家注意,在VC中进行WINSOCK编程时,需要引入如下两个库文件:WINSOCK.H(这个是WINSOCK API的头文件,WIN2K以上支持WINSOCK2,所以可以用WINSOCK2.H);Ws2_32.lib(WINSOCK API连接库文件). 使用方式如下: #include <winsock.h> #pragma comment(lib,"ws2_32.lib") 下面我们通过具体的代码演示服务器和客户端的工作流程: 首先,建立一个WSADATA结构,通常用wsaData WSADATA wsaData; 然后,调用WSAStartup函数,这个函数是连接应用程序与winsock.dll的第一个调用.其中,第一个参数 WINSOCK 版本号,第二个参数是指向WSADATA的指针.该函数返回一个INT型值,通过检查这个值来确定初始化是否成功.调用格式如下:WSAStartup(MAKEWORD(2,2),&wsaData), 其中MAKEWORD(2,2)表示使用WINSOCK2版本.wsaData用来存储系统传回的关于WINSOCK的资料. if(iResuit=WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { printf("WSAStartup failed:%d",GetLastError()); //返回值不等与0,说明初始化失败 if ( bind( server, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) { printf( "bind() failed.\n" ); closesocket(server); return; } // 监听 socket if ( listen( server, 1 ) == SOCKET_ERROR ) printf( "Error listening on socket.\n"); // 接受连接 SOCKET AcceptSocket; printf( "Waiting for a client to connect...\n" ); while (1) { AcceptSocket = SOCKET_ERROR; while ( AcceptSocket == SOCKET_ERROR ) { AcceptSocket = accept( server, NULL, NULL ); } printf( "Client Connected.\n"); server = AcceptSocket; break; } // 发送接受数据 int bytesSent; int bytesRecv = SOCKET_ERROR; char sendbuf[32] = "Server: Sending Data."; char recvbuf[32] = ""; bytesRecv = recv( server, recvbuf, 32, 0 ); printf( "Bytes Recv: %ld\n", bytesRecv ); bytesSent = send( server, sendbuf, strlen(sendbuf), 0 ); printf( "Bytes Sent: %ld\n", bytesSent ); return;