#include <WinSock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <thread>
#include<iostream>
#include <Windows.h>
#include <string>
#pragma comment(lib, "ws2_32.lib") //链接到ws2_32动态链接库
void s(SOCKET &sockConn){
char buf[100]="Server:This is server!";
int n = 1;
while (n>0){
int n = send(sockConn, buf, sizeof(buf), 0);
if (n == -1)
break;
std::string s;
std::cin >> s;
s.insert(0, "Server:");
strcpy(buf, s.c_str());
}
}
void main()
{
WSADATA wsaData;
int port = 5099;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
printf("Failed to load Winsock");
return;
}
//创建用于监听的套接字
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;
}
if (listen(sockSrv, 10) == SOCKET_ERROR){
printf("Listen failed:%d", WSAGetLastError());
return;
}
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;
}
//显示Client的IP。
printf("Accept client IP:[%s]\n", inet_ntoa(addrClient.sin_addr));
//发送数据
std::thread t(s, sockConn);
t.detach();
//接收数据
char recvBuf[100];
memset(recvBuf, 0, sizeof(recvBuf));
int n = 1;
while (n>0){
n=recv(sockConn, recvBuf, sizeof(recvBuf), 0);
if (n == -1){
std::string i = "Client haved exit!";
strcpy(recvBuf, i.c_str());
}
printf("%s\n", recvBuf);
}
closesocket(sockConn);
}
system("pause");
closesocket(sockSrv);
WSACleanup();
}
c++Socket简单通信服务器端
最新推荐文章于 2024-07-10 11:16:10 发布