实现的功能:

1,用户注册(已有用户不能注册)
2,用户登录
3,用户查询单词
4,用户查询历史查询记录
3,并发客户端

客户端实现流程图

客户端服务器共用头文件

#ifndef __NET_H__
#define __NET_H__#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <pthread.h>#define SERV_PORT 5001
#define BACKLOG 5
#define QUIT_STR "quit"
#endif

客户端框架

#include "net.h"#define NAME_LEN 32#define MSGTYPE_R 11
#define MSGTYPE_L 22
#define MSGTYPE_Q 33
#define MSGTYPE_H 44//定义双方通信结构体
typedef struct{int type;char name[NAME_LEN];char data[256];
}MSG_T;int do_register(int sockfd, MSG_T *msg);//声明注册函数
int do_login(int sockfd, MSG_T *msg);//声明登录函数
int do_query(int sockfd, MSG_T *msg);//声明查询函数
int do_history(int sockfd, MSG_T *msg);//声明历史查询函数//判断用户是否正确连接服务器
void usage(char *s){printf("\n%s serv_ip serv_port",s);printf("\n\t serv_ip: server ip address");printf("\n\t serv_port: server port(>5000)\n\n");
}// ./server 192.168.231.134 5001
int main(int argc, char **argv)
{int sockfd = -1;         //套接字接收字符int port = -1;int input_nbr;struct sockaddr_in server_addr; // 网络信息结构体MSG_T send_msg;          //给客户端结构体起个别名//连接服务器时判断输入是否正确if(argc != 3){usage(argv[0]);exit(1);}
/*********************创建套接字**************************/sockfd = socket(AF_INET, SOCK_STREAM, 0);if(sockfd < 0){perror("socket");exit(1);}//字符串转换成整数port = atoi(argv[2]);if(port < 5000){usage(argv[0]);exit(1);}/*********************连接服务器**************************/bzero(&server_addr, sizeof(server_addr)); //清零网络结构体//填充网络结构体server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = inet_addr(argv[1]);server_addr.sin_port = htons(port);//将本机数据转换网络数据if(inet_pton(AF_INET, argv[1], (void *)&server_addr.sin_addr) != 1){//将点分的十进制IP地址转化成用于网络传输的数值格式perror("inet_pton");exit(1);}if(connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0){//建立与指定的socket连接perror("connect");exit(1);}printf("client staring ... ok!\n");/*********************一级菜单**************************/while(1){printf("**************************************\n");printf("***1.register    2.login    3.quit****\n");printf("**************************************\n");printf("please choose:");scanf("%d",&input_nbr);getchar();switch(input_nbr){case 1:do_register(sockfd, &send_msg);break;case 2:if(do_login(sockfd, &send_msg) == 1){goto _login;}break;case 3:close(sockfd);exit(0);break;default:printf("Invalid data cmd.\n");break;}}
/*********************二级菜单**************************/
_login:while(1){printf("****************************************\n");printf("*1.query_word  2.history_record  3.quit*\n");printf("****************************************\n");printf("please choose:");input_nbr = 0;scanf("%d",&input_nbr);getchar();switch(input_nbr){case 1:do_query(sockfd, &send_msg);break;case 2:do_history(sockfd, &send_msg);break;case 3:close(sockfd);exit(0);break;default:printf("Invalid data cmd.\n");break;}}return 0;
}
//注册
int do_register(int sockfd, MSG_T *msg){printf("register ...\n");
}
//登录,服务器返回“OK”才表示登录成功
//返回值: 1 成功; -1 失败; 0 其他
int do_login(int sockfd, MSG_T *msg){printf("login ...\n");
}
//查询单词
int do_query(int sockfd, MSG_T *msg){printf("query ...\n");
}
//历史查询
int do_history(int sockfd, MSG_T *msg){printf("history ...\n");
}

这样客户端的框架就搭建好了,具体效果现在还看不出
通过gcc client.c -o client 编译一下,能成功编译就行
下一篇进行服务器框架搭建

网络编程在线英英词典之客户端代码框架搭建(一)相关推荐

  1. 基于数据库及TCP网络编程实现的电子词典

    目录 一.前言 二.项目介绍 三.功能实现 3.1. 用户注册 3.1.1 功能演示 3.1.2 功能函数实现 3.2. 用户登录 3.2.1 功能演示 3.2.2 功能函数实现 3.3. 查询单词 ...

  2. Java网络编程:TCP实现群聊私聊代码

    Java网络编程:TCP实现群聊&私聊代码 和上一篇博客差不多,只不过是在群里的基础之上增加了私聊的功能,我们约定,私聊格式为:@xxx:msg 如何实现私聊呢,加入客户端c给服务器发送消息, ...

  3. python socket tcp客户端_python网络编程socketserver模块(实现TCP客户端/服务器)

    摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...

  4. python交互式编程客户端_【python】UDP网络编程:实现服务端与客户端的交互、简单的AI智能模式...

    关于UDP网络编程 UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层.UDP是面向非连接的协议,它不与对方建立连接,而是直接把要发的数据发给对方. [UDP网络 ...

  5. Java网络编程入门(二)之客户端与服务器端编程步骤详解

    1.2 网络编程技术 前面介绍了网络编程的相关基础知识,初步建立了网络编程的概念,但是实际学习网络编程还必须使用某种程序设计语言进行代码实现,下面就介绍一下网络编程的代码实现. 1.2.1 网络编程步 ...

  6. Java网络编程:实现QQ邮件发送客户端

    目录 一.目标介绍 1.认识SMTP(邮件传输协议) 2.POP3(邮件接收协议) 二.基于Base64编码邮箱及授权码 1.开通QQ邮箱SMTP/POP3服务 2.Java编写BASE64编码程序 ...

  7. JAVA 网络编程 Socket 详细说明,实现客户端和服务端相互推送消息

    客户端代码: package com.lcx.socket;import java.io.BufferedReader; import java.io.BufferedWriter; import j ...

  8. 【狂神Java笔记】Java网络编程实战详细笔记整理(附代码)

    1.1 概述 计算机网络: 计算机网络是指将地理位置不同 的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递 ...

  9. 《Unix网络编程(第3版)》代码编译的一些问题

    现在学习<UNIX网络编程(第3版)>一书,书中源代码有一些默认情况下编译不能通过,要经过一些修改都行.这编文档将记录下我遇到的不能正常编译的程序的修改步骤. 28章:traceroute ...

  10. Linux网络编程——在线词典项目

    目录 一.要求 二.框架 三.各部分的实现 客户端 注册 登录 查询 历史查询 服务器 解析客户端命令 注册 登录 单词查询 时间获取 查询单词成功向数据库插入时间等信息 历史查询 四.项目源码 客户 ...

最新文章

  1. 求平方根的算法 牛顿迭代法和二分法
  2. vista下文件夹拒绝访问的解决办法
  3. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(10)之素材管理
  4. layui 如何去dom_javascript 怎么去引用layui里面的方法
  5. Enterprise Blocks
  6. 17届互联网校招薪酬报告:白菜价22W,青菜价30W,神价150W
  7. #上位机开发大师之路# 串口控制模块开发
  8. 5G概念被热炒,运营商吃相不要太难看
  9. 苹果app无法打开显示无法连接服务器,无法连接到app store是什么原因?苹果应用商店打不开的解决方法...
  10. 香港流行乐黄金二十年——经典歌手(音乐人)全面回顾 一
  11. Vue源码阅读(28):mergeOptions() 方法源码解析
  12. 卷积神经网络(2)--卷积神经网络的认识、黑白图像的卷积操作
  13. cpu,寄存器,控制器,运算器
  14. 概率论与数理统计——多方法解决-双样本方差的F检验-Excel/SPSS
  15. 修改自己电脑连接的路由器的配置网址192.168.1.1
  16. 计算机图形学(三种画线算法)
  17. weiit—智慧中台,互联网生态体系构建者
  18. 基于奇异值分解的图像压缩matlab
  19. 软件园里的流氓(1)——2005年的故事
  20. 服务器修复oxc0000098,Win10引导文件BCD文件误删或损坏启动错误0xc0000098的解决方法...

热门文章

  1. 2018届华为网络技术大赛复赛组网(B)试题
  2. DBC文件解析及CAN通信矩阵
  3. python创建ppt_python生成ppt的方法
  4. Proe/Creo经典曲面造型实战案例大合集
  5. Java EE 导图
  6. [ArcGIS] 模型构造器中使用重分类 ArcPy与Numpy 相等间隔重分类
  7. 数据库课程设计专题-数据库课程设计大作业作业列表【建议在校生收藏】
  8. 【html】表格table与表单form
  9. 信息系统项目管理师论文写作技巧
  10. 2021最新H3CSE认证备考练习题,错过等明年!