在学习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