#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define SERVPORT 3333
#define MAXDATASIZE 100 /*每次最大数据传输量 */
int main(int argc, char *argv[])
{
int sockfd, recvbytes
char buf[MAXDATASIZE]
struct hostent *host
struct sockaddr_in serv_addr
if (argc <2)
{ fprintf(stderr,"Please enter the server's hostname!\
")exit(1) }
if ((host=gethostbyname(argv[1]))==NULL)
{ perror("gethostbyname出错!")exit(1)}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{ perror("socket创建出错!")exit(1) }
//初始化客户端
serv_addr.sin_family=AF_INET
serv_addr.sin_port=htons(SERVPORT)
serv_addr.sin_addr = *((struct in_addr *)host->h_addr)
bzero(&(serv_addr.sin_zero),8)
//connect
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
{ perror("connect error!")exit(1)}
//recv
if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1)
{ perror("recv出错!")exit(1)}
buf[recvbytes] = '\\0'
printf("Received: %s",buf)
close(sockfd)
return 0
}
客户端#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define SERVPORT 3333 /*服务器监听端口号 */
#define BACKLOG 10 /* 最大同时连接请求数 */
int main()
{
int sockfd,client_fd,sin_size/*sock_fd:监听socket;client_fd:数据传输socket */
struct sockaddr_in my_addr/* 本机地址信息 */
struct sockaddr_in remote_addr/* 客户端地址信息 */
//创建一个套接字,PF_INET,流式,
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{ perror("socket")exit(1) }
//初始化服务端
my_addr.sin_family=AF_INET
my_addr.sin_port=htons(SERVPORT)
my_addr.sin_addr.s_addr = INADDR_ANY
bzero(&(my_addr.sin_zero),8)
//将套接字地址与所创建的套接字号联系起来
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{ perror("bind") exit(1) }
//愿意接收连接
if (listen(sockfd, BACKLOG) == -1)
{ perror("listen") exit(1) }
while(1)
{
sin_size = sizeof(struct sockaddr_in)
if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)
{ perror("accept") continue}
printf("received a connection from %s\
", inet_ntoa(remote_addr.sin_addr))
if (!fork()) { /* 子进程代码段 */
if (send(client_fd, "Hello, you are connected!\
", 26, 0) == -1)
perror("send")close(client_fd)exit(0)}
close(client_fd) }
return 0
}
// 下面是前期的点餐系统的基础数据维护,其它功能你可以自己尝试写,如果遇到什么问题可以提出来追问喔,相信你可以解决的(我怕代码太多提交会受字数限制)。
// mm.h 头文件#include<stdio.h>
#include<stdlib.h>
#define MENU_NUM_MAX 100 // 假设有100种菜式
#define LEN sizeof(struct MenuInfo)
struct MenuInfo
{
int ID
char MenuName[20]
float price
}Menu[MENU_NUM_MAX]
/* 基础数据维护 */
void AddMenu()
{
FILE *fp
int menu_num
printf("\t\t 你要添加多少种菜?:")
scanf("%d",&menu_num)
for(int i=0i<menu_numi++)
{
printf("\n") // added this line
printf("\t\t请输入ID:")
scanf("%d",&Menu[i].ID)
printf("\t\t请输入菜名:")
scanf("%s",Menu[i].MenuName)
printf("\t\t请输入[%s]菜的价格:",Menu[i].MenuName)
Menu[i].price=0.0f //initial float price
scanf("%f",&Menu[i].price)
fflush(stdin)
}
if((fp=fopen("MenuInfo.dat","ab"))==NULL) // open binary file
{
printf("Can't open file\n")
exit(1)
}
for(int j=0j<menu_numj++)
{
if(fwrite(&Menu[j],LEN,1,fp)!=1) //writing data to binary file
printf("Error writing file.\n")
}
fclose(fp) // close file point
}
void DisplayMenuInfo()
{
FILE *fp
printf("\n\t\tID 菜名\t\t价格\n") // column headings
if((fp=fopen("MenuInfo.dat","rb"))==NULL) // open binary file
{
printf("Can't open file\n")
exit(1)
}
int i=0
do
{
fseek(fp,i*LEN,SEEK_SET) // move file head location
if(fread(&Menu[i],LEN,1,fp)) // read data save to structure variable
{
printf("\t\t%d %5s\t\t%5.1f元\n",Menu[i].ID,Menu[i].MenuName,Menu[i].price)
i++
}
}while(!feof(fp))
fclose(fp)
}
void DeleteToMenu()
{
FILE *fp
int MenuID
int todelete=-1
int i=0
printf("请输入要删除的菜名的ID:")
scanf("%d",&MenuID)
/* load or reload the file and check that record with that ID exists */
if((fp=fopen("MenuInfo.dat","rb"))==NULL) // open binary file
{
printf("Can't open file\n")
exit(1)
}
do
{
fseek(fp,i*LEN,SEEK_SET) // move file head location
if(fread(&Menu[i],LEN,1,fp))
{
if (Menu[i].ID==MenuID) todelete=i
i++
}
}while(!feof(fp))
fclose(fp)
if (todelete==-1)
{
printf("A menu with that ID doesn't exist\n")
}
else
{
/* write records back to file excluding one to be deleted */
if((fp=fopen("MenuInfo.dat","wb"))==NULL) // open binary file
{
printf("Can't open file\n")
exit(1)
}
for(int j=0j<ij++)
{
if (j==todelete) continue /* skip record to be deleted */
if(fwrite(&Menu[j],LEN,1,fp)!=1) //writing data to binary file
printf("Error writing file.\n")
}
fclose(fp) // close file point
}
}
void FindMenu()
{
FILE *fp
int MenuID
bool find_mark=false
printf("\n\t\t请输入你要查找的菜名ID:")
scanf("%d",&MenuID)
printf("\n\t\tID 菜名\t\t价格\n") // column headings
if((fp=fopen("MenuInfo.dat","rb"))==NULL) // open binary file
{
printf("Can't open file\n")
exit(1)
}
int i=0
do
{
fseek(fp,i*LEN,SEEK_SET) // move file head location
fread(&Menu[i],LEN,1,fp) // read data save to structure variable
if(Menu[i].ID==MenuID)
{
printf("\t\t%d %5s\t\t%5.1f元\n",Menu[i].ID,Menu[i].MenuName,Menu[i].price)
find_mark=true
break
}
i++
}while(!feof(fp))
if(!find_mark) printf("\n\t 尊敬的客户:我们餐厅没有你要点的菜喔,你可以试试我们的招牌菜啊^-^.\n")
fclose(fp)
}
/* 基础数据维护完毕 */
// sc.cpp主文件
#include <stdio.h>
#include <stdlib.h>
#include "mm.h"
void main(void)
{
//AddMenu()
//DisplayMenuInfo()
//FindMenu()
}
#include <stdio.h>void main()
{
int a[4],i,j,m
char t
printf(”*********************************\n1.红烧肉5.0元2.炸鸡翅3.0元\n3.炒芹菜2.0元4.五香蛋1.0元\n5.退出\n********************************\n\n”)
printf(“请输入您点的菜\n”)
for(i=0i<=3i++)
{scanf(“%d”,&a[i])j=i
if(i<=2)
{printf(“是否继续点菜\n回复Y OR N\n”)
scanf(“%c”,&t)
if(t==Y)
continue
else if(t==N){j=ibreak}
else {printf(“error,自动结算\n”)j=ibreak}}
}
for(i=0,m=0i<=ji++)
m=m+a[i]
printf(“总金额%d\n”,m)
}
//手机编写,错误难免,问题不大,多多包含
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)