📄 server.cpp
字号:
#include<Winsock2.h>
#include<iostream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
#define DEFAULT_PORT 5050
//#define FD_SETSIZ 5;
void main()
{
WSADATA wsaData;
SOCKET sListen,sAccept;
struct sockaddr_in ser,cli;
int temp = 0;
WSAStartup(MAKEWORD(2,2),&wsaData);
cout << "服务器已启动...."<<endl;
sListen = socket(AF_INET,SOCK_STREAM,0);
if(sListen==INVALID_SOCKET)
{
cout <<"套接字错误!";
}
ser.sin_family = AF_INET;
ser.sin_port=htons(5050);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sListen,(SOCKADDR*)&ser,sizeof(SOCKADDR)) == SOCKET_ERROR)
{
cout <<"绑定错误!";
return;
}
listen(sListen,5);
SOCKET sockclient[FD_SETSIZE];
for(int i = 0;i < FD_SETSIZE;i++)
{
sockclient[i] =INVALID_SOCKET;
}
fd_set rset,allset;
FD_ZERO(&allset);
FD_SET(sListen, &allset);
// timeval tv;
// tv.tv_sec = 5;
// tv.tv_usec = 0;
#define MSG_MAX_SIZE 1024
char buf[FD_SETSIZE][MSG_MAX_SIZE];
for(;;)
{
rset = allset; //structure assignment
int ret = select(0,&rset,NULL,NULL,NULL);
if (ret == SOCKET_ERROR)
{
cout << "select()1 failed: "<< WSAGetLastError()<<endl;
break;
}
if (ret == 0) {
continue;
}
if(FD_ISSET(sListen, &rset))
{
struct sockaddr_in cliaddr;
int clilen = sizeof(cliaddr);
SOCKET sockConn = accept(sListen,(sockaddr *)&cliaddr, &clilen);
if (sockConn == SOCKET_ERROR)
{
cout << "accept() failed: "<< WSAGetLastError()<<endl;
break; //continue
}
for(i = 0; i < FD_SETSIZE; i++)
{
if(sockclient[i] == INVALID_SOCKET)
{
sockclient[i] = sockConn;
temp = i;
break;
}
} //for end
if(i <= FD_SETSIZE)
{
FD_SET(sockConn, &allset);
}
else{
cout<<"too many clients";
closesocket(sockConn);
}
}
// if (FD_ISSET(ListenSocket, &rset)) end
for(i = 0; i <= FD_SETSIZE; i++)
{
if ((sockclient[i] != INVALID_SOCKET) &&
FD_ISSET(sockclient[i], &rset))
{
memset(buf[i], 0 , MSG_MAX_SIZE);
int nByte = recv(sockclient[i], buf[i], MSG_MAX_SIZE, 0);
cout<<"客户端:"<< buf[i]<<"已进入!\n";
if (nByte == SOCKET_ERROR)
{
cout << "接受错误: "<< WSAGetLastError()<<endl;
FD_CLR(sockclient[i],&allset);
closesocket(sockclient[i]);
sockclient[i] = INVALID_SOCKET;
continue;
}
if (nByte == 0)
{
FD_CLR(sockclient[i],&allset);
closesocket(sockclient[i]);
sockclient[i] = INVALID_SOCKET;
continue;
}
// send(sockclient[i],buf[i],sizeof(buf[i])+1,0);
for(int index = 0;index < temp ; index++)
{
if((sockclient[i] != INVALID_SOCKET))
{
int unsend = send(sockclient[temp],buf[index],sizeof(buf[index]),0);
if(unsend == SOCKET_ERROR)
{
cout << "发送错误:"<< WSAGetLastError()<<endl;
closesocket(sockclient[i]);
sockclient[i] = INVALID_SOCKET;
continue;
}
}
}
for(int index = 0;index < temp ; index++)
{
if((sockclient[i] != INVALID_SOCKET))
{
int unsend = send(sockclient[index],buf[temp],sizeof(buf[temp]),0);
if(unsend == SOCKET_ERROR)
{
cout << "发送错误:"<<WSAGetLastError()<<endl;
closesocket(sockclient[i]);
sockclient[i] = INVALID_SOCKET;
continue;
}
}
}
//do the request
}
}//loop client end
}// for(;;) end
closesocket(sListen);
WSACleanup();
// system("pause");
// return 0;
}
/*int iLen = sizeof(cli);
char recvbuf[100],sendbuf[100] = "hello!";
while(1)
{
sAccept = accept(sListen,(SOCKADDR*)&cli,&iLen);
recv(sAccept,recvbuf,sizeof(recvbuf),0);
cout << recvbuf << endl;
send(sAccept,sendbuf,sizeof(sendbuf)+1,0);
closesocket(sAccept);
}*/
//WSACleanup();
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -