vc++socket 变量函数的功能说明

来源:互联网 发布:程序员充电 编辑:程序博客网 时间:2024/06/01 08:53

WSADATA
w:windows
s:socket
定义:

摘自<winsock.h>typedef struct WSAData {        WORD                    wVersion;        WORD                    wHighVersion;#ifdef _WIN64        unsigned short          iMaxSockets;        unsigned short          iMaxUdpDg;        char FAR *              lpVendorInfo;        char                    szDescription[WSADESCRIPTION_LEN+1];        char                    szSystemStatus[WSASYS_STATUS_LEN+1];#else        char                    szDescription[WSADESCRIPTION_LEN+1];        char                    szSystemStatus[WSASYS_STATUS_LEN+1];        unsigned short          iMaxSockets;        unsigned short          iMaxUdpDg;        char FAR *              lpVendorInfo;#endif} WSADATA;

作用:WSADATA结构被用来保存AfxSocketInit函数返回的WindowsSockets初始化信息

大凡大凡在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

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;
原创粉丝点击