根据CSDN大神的代码修改之后,增加备注换成了C++的代码实现功能。
正在补充备注信息。实在是太多了。
#include<WinSock2.h>
#include<iostream>
#include<cstdio>
#include<stdlib.h>
using namespace std;
//静态加入一个lib文件,库文件
//parama comment 编译指示文件表述
#pragma comment(lib , "ws2_32.lib")
int main() {
WSADATA WsaData;//存放Windows socket初始化信息//
int port = 5099;//自定义端口号//
char buf[] = "Server: hello , I am Bonstop!";//发送数据//
if(WSAStartup(MAKEWORD(2 , 2) , &WsaData) != 0) {//这个是个什么意思?//
printf("Failed to load Winsock");
return 0;
}
//创建用于监听的套接字//
//监听
//套接字
SOCKET sockSrv = socket(AF_INET , SOCK_STREAM , 0);//套接字//
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(port);//1024以上的端口号//
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
int retVal = bind(sockSrv , (LPSOCKADDR)&addrSrv , sizeof(SOCKADDR_IN));//本地地址和一套接口捆绑//
if(retVal == SOCKET_ERROR){
printf("Failed bind:%d\n" , WSAGetLastError());
return 0;
}
if(listen(sockSrv , 10) == SOCKET_ERROR) {
printf("Listen failed:%d" , WSAGetLastError());
return 0;
}
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
while(1){
//等待客户请求到来//
SOCKET sockConn = accept(sockSrv , (SOCKADDR *) &addrClient , &len);
if(sockConn == SOCKET_ERROR) {
printf("Accept failed:%d" , WSAGetLastError());
break;
}
printf("Accept client IP:[%s]\n" , inet_ntoa(addrClient.sin_addr));
//发送数据//
int isSend = send(sockConn , buf , sizeof(buf) , 0);
if(isSend == SOCKET_ERROR) {
printf("send failed");
break;
}
char recvBuf[100];
memset(recvBuf , 0 , sizeof(recvBuf));
//接受数据//
recv(sockConn , recvBuf , sizeof(recvBuf) , 0);
printf("%s\n" , recvBuf);
closesocket(sockConn);
}
closesocket(sockSrv);
WSACleanup();
system("pause");
}