#include <WINSOCK2.H>
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <time.h>
#pragma comment (lib,"ws2_32.lib")
#define SERVERPORT 6000
#define BUFFERLENGTH 256
using namespace ::std;
DWORD WINAPI serverFunction(LPVOID parameter){
SOCKET acceptSock=(SOCKET)parameter;
time_t rawtime;
struct tm* timeinfo;
time(&rawtime);
timeinfo=localtime(&rawtime);
char receiveBuf[100];//接收
char sendBuf[100];//接收
;
sprintf(sendBuf,"hello time :%s",asctime(timeinfo));
printf("Send:%s\n",sendBuf);
send(acceptSock,sendBuf,strlen(sendBuf)+1,0);
int len=recv(acceptSock,receiveBuf,sizeof(receiveBuf),0);
printf("recv:%s\n",receiveBuf);
return 0;
}
int main (){
WSADATA WSAdata;
SOCKET listenSock,acceptSock;
SOCKADDR_IN addr_in;
WORD versionRequest;
versionRequest=MAKEWORD(2,2);
int err;
err=WSAStartup(versionRequest,&WSAdata);
if(err){
cout<<"Error: WSAStartup()!"<<endl;
}
if((listenSock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)
{
printf("error: WSASocket()! error_number:%d",WSAGetLastError());
return 1;
}
addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(SERVERPORT);
addr_in.sin_addr.S_un.S_addr =htonl(INADDR_ANY);
if(bind(listenSock, (sockaddr*)&addr_in, sizeof(sockaddr)) == SOCKET_ERROR)
{
printf(" Failed bind() \n");
return -1;
}
listen(listenSock,5);
SOCKADDR_IN clientsocket;
int len=sizeof(SOCKADDR);
while(1) {
acceptSock=accept(listenSock,(SOCKADDR*)&clientsocket,&len);
//如果这里不是accept而是conection的话。。就会不断的监听
char sendBuf[100];
sprintf(sendBuf,"hello, %s !",inet_ntoa(clientsocket.sin_addr));//找对对应的IP并且将这行字打印到那里
CreateThread(NULL,0,serverFunction,(LPVOID)acceptSock,0,NULL);
}
WSACleanup();//释放资源的操作
return -1;
}
C++ Socket编程 基础二:多线程Server
最新推荐文章于 2025-02-15 00:15:00 发布