#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,通信,多线程,数据库小练习——在线电子词典第一版的更多相关文章

  1. 关于Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇高质量的博文)

    Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇质量高的博文) 前言:在学习多线程时,遇到了一些问题,这里我将这些问题都分享出来,同时也分享了几篇其他博客主的博客,并且将我个人的理解也分享 ...

  2. Andriod小项目——在线音乐播放器

    转载自: http://blog.csdn.net/sunkes/article/details/51189189 Andriod小项目——在线音乐播放器 Android在线音乐播放器 从大一开始就已 ...

  3. 【转】Delphi多线程学习(9):多线程数据库查询(ADO)

    原文:http://www.cnblogs.com/djcsch2001/articles/2382559.html ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用 ...

  4. android 多线程数据库读写分析与优化

    最新需要给软件做数据库读写方面的优化,之前无论读写,都是用一个 SQLiteOpenHelper.getWriteableDataBase() 来操作数据库,现在需要多线程并发读写,项目用的是2.2的 ...

  5. 教程-Delphi多线程数据库查询(ADO)

    ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...

  6. Delphi多线程数据库查询(ADO)

    ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...

  7. ADO多线程数据库总结

    ADO多线程数据库查询通常会出现以下问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...

  8. 多线程数据库查询(ADO)

    ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...

  9. 微信小程序在线支付功能使用总结

    最近需要在微信小程序中用到在线支付功能,于是看了一下官方的文档,发现要在小程序里实现微信支付还是很方便的,如果你以前开发过服务号下的微信支付,那么你会发现其实小程序里的微信支付和服务号里的开发过程如出 ...

随机推荐

  1. Jade(Pug) 模板引擎使用文档

    本篇内容 在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includ ...

  2. BZOJ 1012【线段树】

    题意: Q L 询问数列最后 L 个数中最大的数. A n 将 n + t ( t_init = 0 ), 然后插到最后去. 思路: 感觉动态地插入,很有问题. 数组地长度会时常变化,但是可以先预处理 ...

  3. struts2学习笔记——常见报错及解决方法汇总(持续更新)

    操作环境:(1)Tomcat 7.0.72.0 (2)OS Name: Windows 7  (3)JVM Version:  1.8.0_25-b18  (4)eclipse Version: Ke ...

  4. go语言web开发框架_Iris框架讲解(六):Session的使用和控制

    在实际的项目开发中,我们会经常有业务场景使用到Session功能.在iris框架中,也为我们提供了方便使用,功能齐全的Session模块.Session模块的源码目录为kataras/iris/ses ...

  5. Luogu P2833 等式 我是傻子x2

    又因为调一道水题而浪费时间...不过细节太多了$qwq$,暴露出自己代码能力的不足$QAQ$ 设$d=gcd(a,b)$,这题不是显然先解出来特解,即解出 $\frac{a}{d}x_0+\frac{ ...

  6. GUI的最终选择 Tkinter(三):Checkbutton组件和Radiobutton组件、LabelFrame组件

    Checkbutton组件 Checkbutton组件就是常见的多选按钮,而Radiobutton则是单选按钮 from tkinter import * root = Tk() v = IntVar ...

  7. (转)深入浅出linux系统umask值及其对应的文件权限讲解

    浅出linux系统umask值及其对应的文件权限讲解 原文:http://blog.51cto.com/oldboy/1060032 缘起:1.此文的撰写特别为感谢51cto的博客工作人员和领导,老男 ...

  8. Spark Mllib里的协调过滤的概念和实现步骤、LS、ALS的原理、ALS算法优化过程的推导、隐式反馈和ALS-WR算法

    不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 (广泛采用) 协调过滤的概念 在现今的推荐技术和算法中,最被大家广泛认可和 ...

  9. asp.net mvc网站的发布与IIS配置

    一.安装IIS (如果服务器上已经安装了就跳过) 控制面板——程序——程序功能——打开或关闭windows功能——勾选Inertnet信息服务下面所有选项——确定 二.获取发布文件(如果已经发不好就跳 ...

  10. HDU 2586——How far away ?——————【LCA模板题】

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...