#include <winsock2.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#pragma comment(lib,"wsock32.lib")
#define MAX_LEN 1024
void InitListenSocket(SOCKET& Listen_Socket)
{
int ret;
WSADATA wsadata;
int Port = 5150;
SOCKADDR_IN Server_Addr;
if ((ret = WSAStartup(MAKEWORD(2,2), &wsadata)) != 0)
{
printf("WSAStartup failed with error %d\n", ret);
return;
}
if ((Listen_Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
printf("socket failed with error %d\n", WSAGetLastError());
WSACleanup();
return;
}
Server_Addr.sin_family = AF_INET;
Server_Addr.sin_port = htons(Port);
Server_Addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(Listen_Socket, (SOCKADDR *)&Server_Addr, sizeof(Server_Addr))== SOCKET_ERROR)
{
printf("bind failed with error %d\n", WSAGetLastError());
closesocket(Listen_Socket);
WSACleanup();
return;
}
if (listen(Listen_Socket, 5) == SOCKET_ERROR)
{
printf("listen failed with error %d\n", WSAGetLastError());
closesocket(Listen_Socket);
WSACleanup();
return;
}
printf("We are awaiting a connection on port %d.\n", Port);
}
//////////////////////////////////////////////////////////////////////////
struct user
{
char name[20];
char code[8];
}us;
struct food
{
char name[20];
int charge;
char intro[20];
}food;
struct offer
{
int num;
char us_n[20];
char fo_n[20];
int qu;
char state[15];
}offer;
void save_user()
{
FILE *fp;
if((fp=fopen("user_list","ab+"))==NULL)
{
printf("cant open file\n");
return;
}
if(fwrite(&us,sizeof(struct user),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void save_food()
{
FILE *fp;
if((fp=fopen("food_list","ab+"))==NULL)
{
printf("cant open file\n");
return;
}
if(fwrite(&food,sizeof(struct food),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
int suo(struct offer *h)
{ struct offer *q=h;
int i=0;
FILE *p;
if((p=fopen("offer_list","rb"))==NULL)
{
printf("cant open file\n");
}
while(fread(&offer,sizeof(struct offer),1,p)==1)
{*q=offer; ++q;++i;}
fclose(p);
return i;
}
int sus(struct user *h)
{ struct user *q=h;
int i=0;
FILE *p;
if((p=fopen("user_list","rb"))==NULL)
{
printf("cant open file\n");
}
while(fread(&us,sizeof(struct user),1,p)==1)
{*q=us; ++q;++i;}
fclose(p);
return i;
}
int ssav(struct food *h)
{ struct food *q=h;
int i=0;
FILE *p;
if((p=fopen("food_list","rb"))==NULL)
{
printf("cant open file\n");
}
while(fread(&food,sizeof(struct food),1,p)==1)
{*q=food; ++q;++i;}
fclose(p);
return i;
}
int certify(char nam[],char code[])
{ FILE *p;
int flag=0;
char f[20]={"admin"};
if((p=fopen("user_list","rb"))==NULL)
{
printf("cant open file\n");
return 1;
}
while(fread(&us,sizeof(struct user),1,p)==1)
{
if(strcmp(us.name,nam)==0) {flag=1;break;}
}
if(flag==0) return -1;
else if(strcmp(us.code,code)==0) {if(strcmp(f,nam)==0) return 2;
else return 0;}
else return 1;
}
int del_user(char nam[])
{ FILE *p;
int i=0;
int flag=0;
if((p=fopen("user_list","ab+"))==NULL)
{
printf("cant open file\n");
}
while(fread(&us,sizeof(struct user),1,p)==1)
{
++i;
if(strcmp(us.name,nam)==0) flag=1;
}
if(flag!=0)
{
struct user *h;
h=(struct user*) malloc((i-1)*sizeof(struct user));
rewind(p);
for(int j=0;j<(i-1);j++){
fread(&h[j],sizeof(struct user),1,p);
if(strcmp(h[j].name,nam)==0) j--;
}
fclose(p);
p=fopen("user_list","wb");
for(j=0;j<(i-1);j++) fwrite(&h[j],sizeof(struct user),1,p);
}
fclose(p);
return flag;
}
int del_food(char nam[])
{ FILE *p;
int i=0;
int flag=0;
if((p=fopen("food_list","ab+"))==NULL)
{
printf("cant open file\n");
}
while(fread(&food,sizeof(struct food),1,p)==1)
{
++i;
if(strcmp(food.name,nam)==0) flag=1;
}
if(flag!=0)
{
struct food *h;
h=(struct food*) malloc((i-1)*sizeof(struct food));
rewind(p);
for(int j=0;j<(i-1);j++){
fread(&h[j],sizeof(struct food),1,p);
if(strcmp(h[j].name,nam)==0) j--;
}
fclose(p);
p=fopen("food_list","wb");
for(j=0;j<(i-1);j++) fwrite(&h[j],sizeof(struct food),1,p);
}
fclose(p);
return flag;
}
void add_offer(char a[],char c[],int m){
FILE *p;
if((p=fopen("offer_list","rb"))==NULL)
{
printf("cant open file\n");
return;
}
fseek(p,-64L,2);
struct offer b;
fread(&b,sizeof(struct offer),1,p);
struct offer offer;
strcpy(offer.us_n,a);
strcpy(offer.fo_n,c);
memcpy(offer.state,"unconfirmed",sizeof("unconfirmed"));
offer.qu=m;
offer.num=b.num+1;
fclose(p);
FILE *fp;
if((fp=fopen("offer_list","ab+"))==NULL)
{
printf("cant open file\n");
return;
}
if(fwrite(&offer,sizeof(struct offer),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
int offer_confirm(int m)
{ FILE *p;
int i=0;
int flag=0;
if((p=fopen("offer_list","ab+"))==NULL)
{
printf("cant open file\n");
}
while(fread(&offer,sizeof(struct offer),1,p)==1)
{
++i;
if(offer.num==m) flag=1;
}
if(flag!=0)
{
struct offer *h;
h=(struct offer*) malloc(i*sizeof(struct offer));
rewind(p);
for(int j=0;j<i;j++){
fread(&h[j],sizeof(struct offer),1,p);
if(h[j].num==m) memcpy(h[j].state,"confirmed!",sizeof("confirmed!"));
}
fclose(p);
p=fopen("offer_list","wb");
for(j=0;j<i;j++) fwrite(&h[j],sizeof(struct offer),1,p);
}
fclose(p);
return flag;
}
int sear(char b[]){
FILE *p;
int flag=0;
if((p=fopen("food_list","rb"))==NULL)
{
printf("cant open file\n");
}
struct food food;
while(fread(&food,sizeof(struct food),1,p)==1)
{
if(strcmp(food.name,b)==0) flag=1;
}
return flag;
fclose(p);
}
//数据报格式
struct Mes_pack
{
char* ip_addr;
char* data_buf;
int data_len;
};
struct Sock_data
{
SOCKET sock;
SOCKADDR_IN addr;
};
//线程接收函数
DWORD WINAPI Thread_Recv(LPVOID param);
void main(void)
{
SOCKET Connect_Socket,Listen_Socket;
SOCKADDR_IN Client_Addr;
int Client_Addr_Len;
int conn_num = 0;
HANDLE hThread;
DWORD dwThreadId;
Sock_data* param= new Sock_data;
InitListenSocket(Listen_Socket);
Client_Addr_Len = sizeof(SOCKADDR);
int i=0;
//CreateThread(NULL,0,Thread_Recv,(LPVOID)param,0,&dwThreadId);
while (true)
{
if((param->sock = accept(Listen_Socket, (SOCKADDR *) ¶m->addr,&Client_Addr_Len)) != INVALID_SOCKET)
{
printf("connection num = %d,socket = %d\n",++conn_num,param->sock);
hThread = CreateThread(NULL,0,Thread_Recv,(LPVOID)param,0,&dwThreadId);
}
}
closesocket(Connect_Socket);
WSACleanup();
}
DWORD WINAPI Thread_Recv(LPVOID param)
{ int Ret=0;
int flag=0;
char a[20],b[20];
char ag[20]={"请输入用户名:"};
char bg[20]={"请输入密码:"};
char fn[20]={"蔬菜名称:"};
char fc[20]={"价格:"};
char fi[20]={"介绍:"};
char of[20]={"编号:"};
char c[20]={"no found!\n"};
char d[20]={"密码错误!\n"};
char e[20]={"welcome!\n"};
Sock_data* data = new Sock_data;
data->sock = ((Sock_data*)param)->sock;
while(1){
send(data->sock,ag,sizeof(a),0);
recv(data->sock,a,sizeof(a),0);
send(data->sock,bg,sizeof(b),0);
recv(data->sock,b,sizeof(b),0);
int x=certify(a,b);
if(x==0||x==2) {
flag=x;
send(data->sock,e,sizeof(e),0); break;}
else if(x==1) send(data->sock,d,sizeof(d),0);
else if(x==-1) send(data->sock,c,sizeof(c),0);
}
char g[50]={"1-查看菜单,2-订购,9-退出"};
char h[150]={"0-查看用户信息\n1-增加用户.\n2-删除用户.\n3-查看菜单.\n4-发布新菜.\n5-删除旧菜.\n6-查看订单.\n7-确认订单.\n9-退出."};
char ng[20]={"请输入用户名:"};
char f[20]={"请输入密码:"};
int m;
int i;
int
评论0