在学习socket之前,需要了解socket连接的流程和结构,简单介绍一下流程:首先:创建套接字socketServer - -> 绑定端口bind() - -> 监听套接字,阻塞等待客户端的连接,
然后客户端也创建套接字socketClient - -> 设置connect()方法 - -> 接着客户端和服务器可进行读写操作来传送信息,方法为recv()和send()。
在socket开发中WSA(WEB SERVER API )是非常重要的API。
以服务器为例子
首先,初始化WSA:int WSAStartup(WORD,&WSADATA)--> WORD(version = MAKEWORD(1,1)) ,WSADATA(wsaData),WSAStartup == 0 时初始化成功
LOBYTE(wsaData.wVersion) ==1||HIBYTE(wsaData.wVersion)==1查找是否有可用的WinSock DLL
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);创建套接字
SOCKADDR_IN addrSrv 得作用为添加端口和地址 -->addrSrv.sin_addr.S_un.S_addr=inet_addr(IP);添加服务器IP地址,addrSrv.sin_family=AF_INET;地址协议族
,addrSrv.sin_port=htons(6000);设置端口地址
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))连接服务器//绑定端口,最后进行读写操作。recv(SOCKET S,char buf[](缓冲),int len(buf长
度),int flags(一般置零))send(SOCKET S,char buf[](缓冲),int len(buf长度),int flags(一般置零))
需要的头文件和库文件: <winsock2.h> ~ <stdio.h> ~ <string.h> ~ ws2_32.lib
实例:socketClient.cpp:
void main() { WORD version = MAKEWORD(1,1);; WSADATA wsaData; SOCKET sockClient; SOCKADDR_IN addrSrv; char recvBuf[100]; char sendBuf[100]; if(WSAStartup(version,&wsaData) != 0){ printf("init the WSA fail"); return; } if(LOBYTE(wsaData.wVersion) !=1||HIBYTE(wsaData.wVersion)!=1){ printf("Lack the WinSock DLL"); //WSACleanup(); return; } sockClient = socket(AF_INET,SOCK_STREAM,0);//creat socket addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); addrSrv.sin_family=AF_INET; addrSrv.sin_port = htons(6000); connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); recv(sockClient,recvBuf,100,0); printf("%s\n",recvBuf); gets(sendBuf); send(sockClient,sendBuf,sizeof(sendBuf),0); }
end