// netServer.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <WinSock2.h>
#include <WS2tcpip.h>
#pragma comment(lib,"ws2_32")
int main()
{
//第一步:WinSock初始化
WORD wVersion = MAKEWORD(2, 2);
WSADATA wsaData;
//WSAStartup,即WSA(Windows Sockets Asynchronous,Windows异步套接字)的启动命令。
if (WSAStartup(wVersion,&wsaData)) {
printf("WSAStartup......\n");
return 0;
}
//第二步:创建套接字
SOCKET hServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == hServer) {
printf("INVALID_SOCKET ERROR\n");
return 0;
}
//对sockaddr_in结构体填充地址、端口等信息
sockaddr_in addrServer;
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(8848);
addrServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
//第三步:绑定套接字与地址信息
int nRet = bind(hServer,(sockaddr *)&addrServer,sizeof(addrServer));
if (nRet == SOCKET_ERROR) {
printf("BIND ERROR\n");
closesocket(hServer);
WSACleanup();
return 0;
}
//第四步:监听套接字
nRet = listen(hServer, 10);
if (nRet == SOCKET_ERROR) {
printf("LISTEN ERROR\n");
closesocket(hServer);
WSACleanup();
return 0;
}
//第五步:获取连接请求
SOCKET hClient;
sockaddr_in addrClient;
int nLen = sizeof(addrClient);
hClient = accept(hServer,(sockaddr *)&addrClient,&nLen);
if (INVALID_SOCKET == hClient) {
printf("ACCEPT ERROR\n");
closesocket(hClient);
closesocket(hServer);
WSACleanup();
return 0;
}
//第六步:循环接收发客户端数据
char szBuf[255];
while (true)
{
memset(szBuf, 0, sizeof(char) * 255);
nRet = recv(hClient,szBuf,255,0);
if (SOCKET_ERROR == nRet)
{
printf("RECV ERROR\n");
closesocket(hClient);
closesocket(hServer);
WSACleanup();
return 0;
}
char sPrintBuf[512];
//旧API
sprintf_s(sPrintBuf, "IP:%s,recv msg:%s",inet_ntoa(addrClient.sin_addr),szBuf);
//char IPdotdec[20];
//新API
//inet_ntop(AF_INET, &addrClient.sin_addr, IPdotdec, 16);
//sprintf_s(sPrintBuf,"IP:%s recv msg:%s", IPdotdec,szBuf);
printf(sPrintBuf);
if (strcmp(szBuf,"close")==0) {
nRet = send(hClient, "close", strlen("close"),0);
break;
}
else {
sprintf_s(sPrintBuf, "recv:%s", szBuf);
nRet = send(hClient,sPrintBuf,strlen(sPrintBuf),0);
if (SOCKET_ERROR == nRet) {
printf("SEND ERROR\n");
closesocket(hClient);
closesocket(hServer);
WSACleanup();
return 0;
}
}
}
return 0;
}
Win Socket基础
猜你喜欢
转载自blog.csdn.net/mypc2010/article/details/80418470
今日推荐
周排行