源代码已上传。
先简单讲一下流程:
WinSock初始化->创建Socket->本地捆绑bind->监听listen->连接connect->传输receive->关闭close
#include<>//这个不要忘了
#pragmacomment(lib,"ws2_32.lib")
//提供了对以下网络相关API的支持
//若使用其中的API,则应该将ws2_32.lib加入工程
1:WinSock初始化
WORDwVersionRequested;//双字节;高字节存取副版本号,低字节存取高版本号。
WSADATAwsaData;//一种结构,存取套接字实现的具体信息
wVersionRequested= MAKEWORD(2, 2);
result =WSAStartup(wVersionRequested, &wsaData);
if (result != 0)
{
printf("WSAStartup()failed!\n");
return 0;
}
2:创建Socket
sListen =socket(AF_INET, SOCK_STREAM, 0);
if (sListen ==INVALID_SOCKET)
{
WSACleanup();
cout << "socket() faild!"<< endl;
return 0;
}
3:本地捆绑
structsockaddr_in saServer;
saServer.sin_family= AF_INET; //地址家族
saServer.sin_port= htons(9210); //服务器端口
saServer.sin_addr.S_un.S_addr= htonl(INADDR_ANY); //服务器地址
length =sizeof(saServer);
result =bind(sListen, (struct sockaddr *)&saServer, length);
if (result ==SOCKET_ERROR)
{
cout << "bind() faild!code:" << WSAGetLastError() << endl;
closesocket(sListen);
WSACleanup();
return 0;
}
4:监听
result =listen(sListen, 5);
if (result ==SOCKET_ERROR)
{
cout << "listen() faild!code:" << WSAGetLastError() << endl;
closesocket(sListen); //关闭套接字
return 0;
}
5:连接
length =sizeof(saClient);
sConnect =accept(sListen, (struct sockaddr *)&saClient, &length);
if (sConnect ==INVALID_SOCKET)
{
cout << "accept() faild!code:" << WSAGetLastError() << endl;
closesocket(sListen); //关闭套接字
WSACleanup();
return 0;
}
6:传输
struct Data
{
char message[2000];//消息
int rest;
}data;
while (1)
{
cout << "接收" << num++<< "信息" <<endl;
result = recv(sConnect, (char*)&data, sizeof(struct Data), 0);
if (result == SOCKET_ERROR)
{
printf("recv()failed!\n");
return 0;
}
if (result == 0) //客户端已经关闭连接
{
printf("Client has closed theconnection\n");
break;
}
(, 1024);
if ( == 0){
cout << "over"<< endl;
break;
}
}
7:关闭
closesocket(sListen);
closesocket(sConnect);
WSACleanup();