C,通信,多线程,数据库小练习——在线电子词典第一版

#ifndef FILE_H
#define FILE_H #include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h> #define BUF_SIZE 128
typedef struct user{
char userch[BUF_SIZE];
int password;
}user; #endif
#include"my.h" /******************************************
*函数:log_in()
*返回值:int
*参数:main()参数,访问套接字,地址结构提
*功能:产生访问套接字
*
**************************************** */
int log_in(int *argc,const char *argv[],int *sockfd,struct sockaddr_in *servaddr){
if((*sockfd=socket(AF_INET,SOCK_STREAM,))==-){ perror("socket error");
exit(-);
}
bzero(servaddr,sizeof(*servaddr)); (*servaddr).sin_family=AF_INET;
(*servaddr).sin_port=htons(atoi(argv[]));
(*servaddr).sin_addr.s_addr=inet_addr(argv[]);
if((connect(*sockfd,(struct sockaddr *)servaddr,sizeof(*servaddr)))==-){ perror("connect error");
exit(-);
} //登录 while(){
user cliuser={
"lanbofei221", };
send(*sockfd,&cliuser,sizeof(cliuser),);
break;
} return ;
}
/**************************************
*函数:translation()
*参数:访问套接字
*返回值 :0或1
*功能:发送原文,接受译文
* ************************************** */
int translation(int *sockfd){ char buf[BUF_SIZE]={};//"beautiful";
printf("输入要翻译的英文;\n");
//getchar();
scanf("%s",buf);
char dict[BUF_SIZE]={};
if(send(*sockfd,buf,sizeof(buf),)==-){ perror("send error\n");
exit(-);
};
printf("发送成功\n");
recv(*sockfd,dict,BUF_SIZE,);
printf("%s\n",dict);
close(*sockfd);
return ;
}
/**********************************
*函数:main()
*参数:主调函数
*功能:登录服务器,发送原文,接收译文
*
********************************* */
int main(int argc, const char *argv[])
{
int sockfd;
struct sockaddr_in servaddr;
if(argc<){ printf("Usage:%s<ip><port>\n",argv[]);
exit(-);
} //登录
log_in(&argc,argv,&sockfd,&servaddr);
//链接翻译
translation(&sockfd); return ;
}
/*********************************
* 实验目的:实现客户机和服务器的通信,在线实时翻译,对多个客户机并发服务
*实验思路:
* 一;模块化编程
* 二;使用tcp链接客户机和服务器
* 三;使用文件IO对字典文件进行单词查询
* 四;服务器多进程并发
********************************* */ #include"my.h"
#include<signal.h>
#include<stdio.h>
#include<string.h> /*********************************
*函数:log_in()
*参数:main()函数传参个数地址和向量表,服务套接字和地址结构体的地址,
*返回值:0或1
* 功能:创建一个负责监听的主进程,每当有客户机链接时创建专门服务的子进程。提供登录模块
* 注意:使用指针的指向是记得加*
********************************/
int log_in(int argc,const char *argv[],int *connfd,struct sockaddr_in *cliaddr){
if(argc<){
printf("Usage:%s <ip><port>\n",argv[]);
exit(-);
}
//printf("%s\n%s\n",argv[1],argv[2]);
pid_t pid;
int listenfd=;
struct sockaddr_in servaddr; if((listenfd=socket(AF_INET,SOCK_STREAM,))==-){
perror("socket error");
exit(-);
}
printf("listenfd=%d\n",listenfd);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(atoi(argv[]));
servaddr.sin_addr.s_addr=inet_addr(argv[]);
if(bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<){ perror("bind error\n");
exit(-);
}
printf("bind success\n");
if((listen(listenfd,))==-){ perror("listen error\n");
exit(-);
}
printf("listen success\n");
socklen_t peerlen=sizeof(servaddr);
while(){
bzero(cliaddr,peerlen);
if((*connfd=accept(listenfd,(struct sockaddr *)cliaddr,&peerlen))<){
perror("accept error");
exit(-);
}
//printf("connection from [%s:%d]\n",inet_ntoa((*cliaddr).sin_addr),ntohs((*cliaddr).sin_port)); if((pid=fork())<){ perror("fork error");
exit(-);
}else if(pid==){ printf("与[%s:%d] 链接成功\n",inet_ntoa((*cliaddr).sin_addr),ntohs((*cliaddr).sin_port));
//登录模块 while(){
user seruser;
recv(*connfd,&seruser,sizeof(seruser),);
printf("帐号:%s\n",seruser.userch);
break;
} break;
}else{ close(*connfd);
}
} return ;
}
/************************************
* 函数:translation()
* 参数:服务套接字
* 返回值:1或0
* 功能:接受客户机发送的单词,进行翻译然后结果返回客户机。
* 注意:
*********************************** */ int translation(int *connfd){
char buf[BUF_SIZE];
printf("等待数据aaaaaaaaaa\n");
if((recv(*connfd,buf,BUF_SIZE,))==-){ perror("recv error\n");
exit(-);
}
printf("接受数据:%s\n",buf); char dict[]={};
FILE *fp; if((fp=fopen("dict.txt","r"))==NULL){ perror("fail to fopen\n");
return ;
}
while(fgets(dict,,fp)!=NULL){ if(strncmp(dict,buf,strlen(buf))==){ printf("查询结果:%s\n",dict);
break;
}
while(dict[strlen(dict)-]!='\n'){ fgets(dict,,fp);
}
bzero(&dict,sizeof(dict));
strcpy(dict,"未找到查询结果\n");
}
send(*connfd,dict,strlen(dict)+,); close(*connfd);
return ;
}
/***********************************
*函数:main()
*功能:接受参数,进行登录链接,接收客户机原文,进行翻译并返回客户机
*注意:
* */
int main(int argc, const char *argv[])
{
int connfd;
struct sockaddr_in cliaddr; log_in(argc,argv,&connfd,&cliaddr);
translation(&connfd); return ;
}
C,通信,多线程,数据库小练习——在线电子词典第一版的更多相关文章
- 关于Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇高质量的博文)
Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇质量高的博文) 前言:在学习多线程时,遇到了一些问题,这里我将这些问题都分享出来,同时也分享了几篇其他博客主的博客,并且将我个人的理解也分享 ...
- Andriod小项目——在线音乐播放器
转载自: http://blog.csdn.net/sunkes/article/details/51189189 Andriod小项目——在线音乐播放器 Android在线音乐播放器 从大一开始就已 ...
- 【转】Delphi多线程学习(9):多线程数据库查询(ADO)
原文:http://www.cnblogs.com/djcsch2001/articles/2382559.html ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用 ...
- android 多线程数据库读写分析与优化
最新需要给软件做数据库读写方面的优化,之前无论读写,都是用一个 SQLiteOpenHelper.getWriteableDataBase() 来操作数据库,现在需要多线程并发读写,项目用的是2.2的 ...
- 教程-Delphi多线程数据库查询(ADO)
ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- Delphi多线程数据库查询(ADO)
ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- ADO多线程数据库总结
ADO多线程数据库查询通常会出现以下问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- 多线程数据库查询(ADO)
ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- 微信小程序在线支付功能使用总结
最近需要在微信小程序中用到在线支付功能,于是看了一下官方的文档,发现要在小程序里实现微信支付还是很方便的,如果你以前开发过服务号下的微信支付,那么你会发现其实小程序里的微信支付和服务号里的开发过程如出 ...
随机推荐
- sqlserver2012——存储过程
存储过程:是一组为了完成特定功能的SQL语句,经编译后存储在数据库中. 他们可以接受参数.输出参数.返回单个或者多个结果集以及返回值 存储过程种类 1.用户自定义存储过程 2.系统存储过程 3.扩展存 ...
- Sharding-JDBC 使用入门和基本配置
一.什么是Sharding-JDBC Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务.它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理 ...
- VS Code(待补充)
使用! 然后Tab 快速生成html文档结构 快速生成一个类 .类名 会有提示 .container.box .col-6*2 VisualStudio Code怎么同时编辑多处?
- 基于XML的AOP配置
创建spring的配置文件并导入约束 此处要导入aop的约束 <?xml version="1.0" encoding="UTF-8"?> < ...
- 洛谷P1800 software_NOI导刊2010提高(06)
P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ...
- vs.net远程调试
有些时候,不能在本机器启动程序进行调试,例如调试全屏模式,或者调试那些需要在特定运行环境的程序,这时候就只能进行远程调试了. 一般的调试器都支持远程调试,vs也不例外.只需要在远程机器上启动一个应用程 ...
- Jmeter中JDBC Request和BeanShell PostProcessor的结合使用(SQL模糊查询)
[前言] 今天记录一下Jmeter中JDBC Request和BeanShell PostProcessor的结合使用的方法(SQL模糊查询) [步骤] 1.下载对应数据库的驱动包到jmeter安装目 ...
- Unity---DOTween插件学习(2)---设置参数、Ease曲线、回调函数、动画控制函数
目录 6.Set设置参数 7.Ease曲线 8.回调函数 9.动画控制函数 本文及系列参考于Andy老师的DOTween系列 欢迎大家关注Andy老师 6.Set设置参数 在Unity中添加一个Cub ...
- centos7安装配置docker
1. 安装/升级Docker客户端 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . uname -r 从 ...
- $.store.book[?(@.title =~ /^.*Honour.*$/i)]
{ "store": { "book": [ { "category": "reference", "auth ...