三天,我会向大家展示我写的网络银行的项目,由于虚拟机出现了问题,今天我先写思路和整体的框架。开整——冲冲冲!!!!
1.布局
1.我们肯定需要一个服务端和客户端,我们需要新建两个文件夹分别实现客户和服务端的功能
(这两个主要是实现信息的交互反馈)//我们将其明明为:server 和 client
2.然后,既然是服务系统,那我就需要保存客户的信息,我们就需要文件读取保存信息,
那我们就需要再建一个文件夹来实现文件读取的功能//我们将其命名为:fileoper
3.既然,我们保存了数据,那么后台每次读取文件信息,用何种方式保存信息在内存中,
方式很多,我们这里采用单链表来保存客户类型的结构体的地址在链表中,也就是采用万能链表。
我们需要新建一个实现链表功能的文件夹//我们将其命名为:slinklist
4.由于最后编译后.0文件很多,来存放这些.O,此时我们可以采用动态库的方式来管理这些文件
//我们将其命名为:lib
5.同理,我们可以新建一个文件夹来管理所有的.h文件。//我们将其命名为:include
今天,我们先写服务器和客户端,列出框架,明后天再写出业务功能
2.服务器(server)
server.h
#ifndef _SERVER_H__
#define _SERVER_H__
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <wait.h>
#define PORT 8888
#define IP "127.0.0.1"
#define MAX 5
int server_run();
#endif
server.c
#include "server.h"
int server_run(){
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd == -1){
perror("socket");
return -1;
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = inet_addr(IP);
socklen_t len = sizeof(addr);
int ret = bind(sockfd,(const struct sockaddr *)&addr,len);
if(ret == -1){
perror("bind");
return -1;
}
ret = listen(sockfd,MAX);
if(ret == -1){
perror("listen");
return -1;
}
while(1){
struct sockaddr_in caddr = {};
socklen_t clen = sizeof(caddr);
int cfd = accept(sockfd,(struct sockaddr *)&caddr,&clen);
if(cfd == -1){
perror("accept");
return -1;
}
pid_t pid = fork();
if(pid == -1){
perror("fork");
return -1;
}
if(pid == 0){
while(1){
Msg msg = {};
ssize_t sz = recv(cfd,(void *)&msg,sizeof(msg),0);
if(sz == -1){
perror("recv");
return -1;
}
int opt = 0;
opt = msg.type;
Back back = {};
switch(opt){
case 1:
case 2:
case 3:
case 4:
default :
break;
}
sz = send(cfd,(const void*)&back,strlen(back.msg)+sizeof(back.type)+1,0);
if(sz == -1){
perror("send");
return -1;
}
}
}
close(cfd);
}
wait(NULL);
close(sockfd);
}
server_main.c
#include "server.h"
int main(){
server_run();
return 0;
}
客户端(client)
client.h
#ifnde _SERVER_H__
#define _SERVER_H__
#include "server.h"
int client_run();
#endif
client.c
#include "client.h"
int client_run(){
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd == -1){
perror("socket");
return -1;
}
struct sockaddr_in addr = {};
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = inet_addr(IP);
socklen_t len = sizeof(addr);
int ret = connect(sockfd,(const struct sockaddr *)&addr,len);
if(ret == -1){
perror("connect");
return -1;
}
while(1){
Msg msg = {};
Back back = {};
int opt = 0;
printf("请输入您的选择:\n");
scanf("%d",&opt);
switch(opt){
case 1:
case 2:
case 3:
default :
send(sockfd,(const void *)&msg,strlen(msg.msg)+sizeof(msg.type)+1,0);
recv(sockfd,(void *)&back,sizeof(back),0);
break;
}
}
close(sockfd);
}
client_main.c
#include "client.h"
int main(){
client_run();
return 0;
}
|