该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
server.cpp
// server.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include
#pragma comment(lib , "Ws2_32.lib") struct users
{
char name[20];
char password[20];
}info[100], * r; void HandleTCPClient(int clientSocket); int main(int argc, char* argv[])
{
SOCKET serverSock;
SOCKET clientSock;
struct sockaddr_in serverAddr;
struct sockaddr_in clientAddr;
unsigned short serverPort;
int clientLength;
FILE *fp;int i;
char name[20],password[20];
char feedback, * f = &feedback;
char state = 1, reg = 1, * p, * q; p = &state; q = ® WSADATA wsaData;
WSAStartup(MAKEWORD(2,0),&wsaData);
printf("输入你需要连接的服务器端口:\n");
scanf("%d",&serverPort); serverSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if( serverSock == INVALID_SOCKET )
{
puts("socket error!");
printf("错误代码:%d \n" , WSAGetLastError());
exit(1);
}
memset(&serverAddr,0,sizeof(serverAddr));
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons(serverPort);
serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);
if( bind(serverSock,(struct sockaddr*)&serverAddr,sizeof(serverAddr)) == SOCKET_ERROR )
{
puts("bind error!");
exit(1);
}
listen(serverSock,10); for(;;)
{
clientLength=sizeof(clientAddr);
clientSock=accept(serverSock,(struct sockaddr*)&clientAddr,&clientLength);
/* 管理注册与登录 */
while(1)
{
r = info;
if((fp=fopen("users.dat","r"))==NULL)
{
printf("Cannot open file strike any key exit!");
system("pause");
exit(1);
}
fread(r, sizeof(struct users), 100, fp);
recv(serverSock, f, sizeof(f), 0);
if(feedback == 0) //登录
{
recv(serverSock, name, sizeof(name), 0);
recv(serverSock, password, sizeof(password), 0);
for(i = 0; i < 100; i++)
if( !( strcmp(name,info->name)&&strcmp(password,info->password) ) )//如果和某一组用户名和密码相等
{p = 0; send(serverSock, p, sizeof(p), 0); fclose(fp); printf("用户已登录"); fclose(fp); break;}
else continue;
}
else //feedback == 1 注册
{
recv(serverSock, name, sizeof(name), 0);
recv(serverSock, password, sizeof(password), 0);
fclose(fp);
fp=fopen("users.dat","at");
fputs(name , fp);
fputs(password , fp);
q = 0; send(serverSock, q, sizeof(q), 0); fclose(fp); printf("用户已注册"); continue;
}
}
printf("已经与客户端%s连接,请稍候\n",inet_ntoa(clientAddr.sin_addr));
HandleTCPClient(clientSock);
}
return 0;
} void HandleTCPClient(int clientSocket)
{
char sendMsg[100];
char receiveMsg[100];
int Msglength; memset(sendMsg,0,sizeof(sendMsg));
memset(receiveMsg,0,sizeof(receiveMsg));
for(;;)
{
puts("收信:\n");
for(;;)
{
Msglength = recv(clientSocket, receiveMsg,100,0);
if((Msglength ==100)||(Msglength<=0)) break;
}
puts(receiveMsg);
memset(receiveMsg,0,sizeof(receiveMsg));
puts("回信:\n");
gets(sendMsg);
if( send(clientSocket,sendMsg,100,0)<=0 )
{
puts("send message error!");
}
memset(sendMsg,0,sizeof(sendMsg));
} closesocket(clientSocket);
}