Linux编写一个学生管理系统,基于Linux Socket 简单学生信息管理系统Server程序

基于Linux Socket 简单学生信息管理系统Server程序

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define SERVERPORT 3333

#define BACKLOG 5

#define MAX_CONNECTED_NO 10

#define MAXDATASIZE 1024

#define NODE_LEN sizeof(node)

int sockfd,client_fd;

int padnum=0;

char name[10];

int fd;

// file

ssize_t W_num,R_num;

struct student

{

char name[10];

int age;

int height;

char sex;

}recv_stu,s_send_stu;

typedef struct NODE

{

struct student std;

struct NODE *next;

}node;

struct cmd_data

{

char ch;

struct student recv_stt;

}recv_cmd_data;

#if  0

}

#endif

node *insert_from_head(node *head,struct student *stu)

{

node *pnew;

node *pend;

// pend=head;

pnew=(node *)malloc(NODE_LEN);

if(pnew==NULL)

{

{

perror("not insert");

exit(1);

}

perror("malloc");

exit(1);

}

// pnew=stu;

strcpy(pnew->std.name,stu->name);

pnew->std.age=stu->age;

pnew->std.height=stu->height;

pnew->std.sex=stu->sex;

if(head==NULL)

{

head=pnew;

pnew->next=NULL;

}

else

{

pnew->next=head;

head=pnew;

}

padnum=padnum+1;

return (head);

}

node *search_all(node *head)

{

node *p=head;

if(p==NULL)

{

exit(1);

}

while(p!=NULL)

{

p=p->next;

}

return p;

}

void print_list(node *head)

{

node *p=head;

printf("server:\n");

if(p==NULL)

{

printf("nothing:");

}

while(p!=NULL)

{

if(send(client_fd,p,NODE_LEN,0)==-1)

{

perror("send");

exit(1);

}

// printf("name=%s\nage=%d\nheight=%d\nsex=%c\n",p->std.name,p->std.age,p->std.height,p->std.sex);

p=p->next;

}

}

int length_list(node *head)

{

node *p=head;

int length=0;

while(p!=NULL)

{

length++;

p=p->next;

}

return length;

}

void clear_list(node *head)

{

node *p,*q;

p=head;

while(p!=NULL)

{

q=p;

p=p->next;

free(q);

}

}

node  *search_by_name(node *head,char name[] )

{

node *p;

p=head;

while(p!=NULL)

{

if(strcmp(p->std.name,name)==0)

break;

p=p->next;

}

return p;

}

node * delete_by_name(node *head,char name[])

{

node *p,*q;

p=head;

if(strcmp(p->std.name,name)==0)

{

head=head->next;

free(p);

return(head);

}

else

{

q=p;p=p->next;

while(p!=NULL)

{

if(strcmp(p->std.name,name)==0)

{ q->next=p->next;

free(p);

}

else

{

q=p;p=p->next;

}

}

}

return(head);

}

int main()

{

node *head;

node *s_search_data;

int W_LEN=sizeof(node);

node W_buf,R_buf,node_data;

int W_size,R_size;

FILE *fp;

struct sockaddr_in server_sockaddr,client_sockaddr;

int sin_size,recvbytes;

char buf[MAXDATASIZE];

//load file data

if((fd=open("/home/fcf/socket/student.txt",O_CREAT|O_APPEND|O_RDWR,0666))<0)

{

perror("open:");

exit(1);

}

else

{

printf("open file:%d\n",fd);

}

do

{

if((R_size=read(fd,&R_buf,NODE_LEN))<0)

{

perror("read:");

exit(1);

}

node_data=(node)R_buf;

if(R_size==0)

;

else

printf("name=%sage=%dheight=%dsex=%c\n",\

node_data.std.name,node_data.std.age,node_data.std.height,node_data.std.sex);

if((head = insert_from_head(head,&(node_data.std)))==NULL)

{

perror("not insert");

exit(1);

}

}while(R_size!=0);

close(fd);

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)

{

perror("socket");

exit(1);

}

printf("socket success!,sockfd=%d\n",sockfd);

server_sockaddr.sin_family=AF_INET;

server_sockaddr.sin_port=htons(SERVERPORT);

server_sockaddr.sin_addr.s_addr=INADDR_ANY;

bzero(&(server_sockaddr.sin_zero),8);

if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1)

{

perror("bind");

exit(1);

}

printf("bind success!\n");

if(listen(sockfd,BACKLOG)==-1)

{

perror("listen");

exit(1);

}

printf("listening......\n");

if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1)

{

perror("accept");

exit(1);

}

while(1)

{ if((recvbytes=recv(client_fd,&recv_cmd_data,sizeof(struct cmd_data),MSG_WAITALL))==-1)

{

perror("recv");

exit(1);

}

strcpy(recv_stu.name,recv_cmd_data.recv_stt.name);

recv_stu.age   = recv_cmd_data.recv_stt.age;

recv_stu.height= recv_cmd_data.recv_stt.height;

recv_stu.sex   = recv_cmd_data.recv_stt.sex;

printf("%c\n",recv_cmd_data.ch);

switch(recv_cmd_data.ch)

{

case'i':if((head = insert_from_head(head,&recv_stu))==NULL)

{

perror("not insert");

exit(1);

}

// memset(&W_buf,0,W_LEN);

// W_buf=*head;

printf("name=%s,age=%d,height=%d,sex=%c",\

head->std.name,head->std.age,head->std.height,head->std.sex);

if((fd=open("/home/fcf/socket/student.txt",O_CREAT|O_APPEND|O_RDWR,0666))<0)

{

perror("open:");

exit(1);

}

else

{

printf("open file:%d\n",fd);

}

if(( W_size = write(fd,head,NODE_LEN))<0)

{

perror("write:");

exit(1);

}

// printf("name=%s,age=%d,height=%d,sex=%c",\

// head->std.name,head->std.age,head->std.height,head->std.sex);

close(fd);

break;

case'd':delete_by_name(head,recv_stu.name);

break;

case's':

s_search_data=search_by_name(head,recv_stu.name);

printf("www....\n");

if(s_search_data!=NULL)

{

// break;

// }

if(send(client_fd,s_search_data,sizeof(node),0)==-1)

{

perror("send");

exit(1);

}

}

else

{

printf("no data:\n");

break;

}

break;

case'p':print_list(head);//print all students information

break;

default:break;

//send(client_fd,&send_error_buf,sizeof(send_error_buf),0);

// exit(1);

}

} if(send(client_fd,&recv_stu,sizeof(struct student),0)==-1) {

perror("send");

exit(1);

}

printf(" sever:\n");

print_list(insert_from_head(head,&recv_stu));

// }

// printf("name=%s\nage=%d\nheight=%d\nsex=%c\n",\

// recv_stu.name,recv_stu.age,recv_stu.height,recv_stu.sex);

close(sockfd);

}0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值