//服务器端
#include<stdio.h>
#pragma comment(lib,"WS2_32.lib")
#include<Winsock2.h>
#include<string.h>
#include<memory.h>
#include <string.h>
#include <conio.h>
#define MAX_BUF 60000
FILE *fp;
int main()
{
WSAData wsadata;
int iresult = WSAStartup(MAKEWORD(2,2),&wsadata);
if(0 != iresult)
{
return 0;
}
SOCKET listensock;
listensock = socket(AF_INET, SOCK_STREAM, 0);
if(INVALID_SOCKET == listensock)
{
printf("listensock %d",WSAGetLastError());
WSACleanup();
return -1;
}
sockaddr_in servise;
servise.sin_family = AF_INET;
servise.sin_port = htons(20000);
servise.sin_addr.s_addr = htonl(INADDR_ANY);
int err = bind(listensock,(sockaddr *)&servise,sizeof(servise));
if(SOCKET_ERROR == err)
{
printf("bind %d",WSAGetLastError());
closesocket(listensock);
WSACleanup();
return -1;
}
err = listen(listensock,1);
if(SOCKET_ERROR == err)
{
printf("listen %d",WSAGetLastError());
closesocket(listensock);
WSACleanup();
return -1;
}
#define MAX_CLIENT_NUM 63
SOCKET client[MAX_CLIENT_NUM];
for(int i = 0;i<MAX_CLIENT_NUM;i++)
{
client[i] = INVALID_SOCKET;
}
fd_set rset,allset;
FD_ZERO(&allset);
FD_SET(listensock,&allset);
#define MSG_MAX_SIZE 1024
char buf[MAX_CLIENT_NUM][MSG_MAX_SIZE];
char sbuf[MAX_CLIENT_NUM][MSG_MAX_SIZE];
memset(sbuf,0,MSG_MAX_SIZE);
for(;;)
{
rset = allset;
int ret = select(0,&rset,NULL,NULL,NULL);
if(ret == SOCKET_ERROR)
{
printf("select %d",WSAGetLastError());
break;
}
if(ret == 0)
{
continue;
}
if(FD_ISSET(listensock,&rset))
{
struct sockaddr_in cliaddr;
int clilen = sizeof(cliaddr);
SOCKET sockconn = accept(listensock,(sockaddr *)&cliaddr,&clilen);
if(SOCKET_ERROR == sockconn)
{
printf("accept %d",WSAGetLastError());
break;
}
for(i = 0;i<MAX_CLIENT_NUM;i++)
{
if(client[i] ==INVALID_SOCKET)
{
client[i]=sockconn;
break;
}
}
if(i<MAX_CLIENT_NUM)
{
FD_SET(sockconn,&allset);
}
else
{
closesocket(sockconn);
}
}
//static int j=0; //存储所以发过来的信息
for(i = 0;i<MAX_CLIENT_NUM;i++)
{
if((client[i] !=INVALID_SOCKET) && (FD_ISSET(client[i],&rset)))
{
memset(buf[i],0,MSG_MAX_SIZE);
int nbyte = recv(client[i],buf[i],MSG_MAX_SIZE,0);
if(SOCKET_ERROR == nbyte)
{
printf("recv %d",WSAGetLastError());
FD_CLR(client[i],&allset);
closesocket(client[i]);
client[i]=INVALID_SOCKET;
continue;
}
if(nbyte == 0)
{
FD_CLR(client[i],&allset);
closesocket(client[i]);
client[i]=INVALID_SOCKET;
continue;
}
int j=0; //存储发过来的信息
strcpy(sbuf[j],buf[i]);
j++;
for(int i = 0;i<MAX_CLIENT_NUM;i++)
{
for(int k = 0;k<j;k++)
{
printf("%d\n",j);
send(client[i],sbuf[k],1024,0);
}
}
}
}//client end
}//for(;;)
closesocket(listensock);
WSACleanup();
return 0;
}
- 1
- 2
前往页