#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. 【转】List<T>和ILIst<T>的区别

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace List ...

  2. PS2018学习笔记(25-29节)

    25-亮度与色阶看懂直方图-part1 # 本节知识点: 灰度模式 明暗对比 明度/对比度命令 直方图 色阶命令 调整图层 # 本节段落表: 了解亮度对比 灰度模式观察明暗 明度/对比度命令 认知对比 ...

  3. Unity3D -- shader语法内置函数

    该篇是Unity Shader中HLSL的内置函数,主要是一些数学方面的计算函数.在写Shader的时候可以直接使用. abs //计算输入值的绝对值. acos //返回输入值反余弦值. all / ...

  4. poj3694(lca + tarjan求桥模板)

    题目链接: http://poj.org/problem?id=3694 题意: 给出一个 n 个节点 m 条边的图, 然后有 q 组形如 x, y 的询问, 在前面的基础上连接边 x, y, 输出当 ...

  5. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

  6. 2017-10-3 清北刷题冲刺班a.m

    P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...

  7. 大融合——LCT维护子树信息

    题目 [题目描述] 小强要在 $N$ 个孤立的星球上建立起一套通信系统.这套通信系统就是连接 $N$ 个点的一个树.这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够联通的树 ...

  8. [Xcode 实际操作]四、常用控件-(6)UISwitch开关控件的使用

    目录:[Swift]Xcode实际操作 本文将演示开关控件的基本用法. 开关控件有两个互斥的选项,它是用来打开或关闭选项的控件. 在项目导航区,打开视图控制器的代码文件[ViewController. ...

  9. Tomcat热部署的实现原理

    Tomcat热部署机制 对于Java应用程序来说,热部署就是在运行时更新Java类文件.在基于Java的应用服务器实现热部署的过程中,类装入器扮演着重要的角色.大多数基于Java的应用服务器,包括EJ ...

  10. [USACO07MAR]黄金阵容均衡Gold Balanced L… map

    题目描述 Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been able to na ...