网络编程在线英英词典之客户端代码框架搭建(一)
实现的功能:
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
编译一下,能成功编译就行
下一篇进行服务器框架搭建
网络编程在线英英词典之客户端代码框架搭建(一)相关推荐
- 基于数据库及TCP网络编程实现的电子词典
目录 一.前言 二.项目介绍 三.功能实现 3.1. 用户注册 3.1.1 功能演示 3.1.2 功能函数实现 3.2. 用户登录 3.2.1 功能演示 3.2.2 功能函数实现 3.3. 查询单词 ...
- Java网络编程:TCP实现群聊私聊代码
Java网络编程:TCP实现群聊&私聊代码 和上一篇博客差不多,只不过是在群里的基础之上增加了私聊的功能,我们约定,私聊格式为:@xxx:msg 如何实现私聊呢,加入客户端c给服务器发送消息, ...
- python socket tcp客户端_python网络编程socketserver模块(实现TCP客户端/服务器)
摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...
- python交互式编程客户端_【python】UDP网络编程:实现服务端与客户端的交互、简单的AI智能模式...
关于UDP网络编程 UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层.UDP是面向非连接的协议,它不与对方建立连接,而是直接把要发的数据发给对方. [UDP网络 ...
- Java网络编程入门(二)之客户端与服务器端编程步骤详解
1.2 网络编程技术 前面介绍了网络编程的相关基础知识,初步建立了网络编程的概念,但是实际学习网络编程还必须使用某种程序设计语言进行代码实现,下面就介绍一下网络编程的代码实现. 1.2.1 网络编程步 ...
- Java网络编程:实现QQ邮件发送客户端
目录 一.目标介绍 1.认识SMTP(邮件传输协议) 2.POP3(邮件接收协议) 二.基于Base64编码邮箱及授权码 1.开通QQ邮箱SMTP/POP3服务 2.Java编写BASE64编码程序 ...
- JAVA 网络编程 Socket 详细说明,实现客户端和服务端相互推送消息
客户端代码: package com.lcx.socket;import java.io.BufferedReader; import java.io.BufferedWriter; import j ...
- 【狂神Java笔记】Java网络编程实战详细笔记整理(附代码)
1.1 概述 计算机网络: 计算机网络是指将地理位置不同 的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递 ...
- 《Unix网络编程(第3版)》代码编译的一些问题
现在学习<UNIX网络编程(第3版)>一书,书中源代码有一些默认情况下编译不能通过,要经过一些修改都行.这编文档将记录下我遇到的不能正常编译的程序的修改步骤. 28章:traceroute ...
- Linux网络编程——在线词典项目
目录 一.要求 二.框架 三.各部分的实现 客户端 注册 登录 查询 历史查询 服务器 解析客户端命令 注册 登录 单词查询 时间获取 查询单词成功向数据库插入时间等信息 历史查询 四.项目源码 客户 ...
最新文章
- 求平方根的算法 牛顿迭代法和二分法
- vista下文件夹拒绝访问的解决办法
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(10)之素材管理
- layui 如何去dom_javascript 怎么去引用layui里面的方法
- Enterprise Blocks
- 17届互联网校招薪酬报告:白菜价22W,青菜价30W,神价150W
- #上位机开发大师之路# 串口控制模块开发
- 5G概念被热炒,运营商吃相不要太难看
- 苹果app无法打开显示无法连接服务器,无法连接到app store是什么原因?苹果应用商店打不开的解决方法...
- 香港流行乐黄金二十年——经典歌手(音乐人)全面回顾 一
- Vue源码阅读(28):mergeOptions() 方法源码解析
- 卷积神经网络(2)--卷积神经网络的认识、黑白图像的卷积操作
- cpu,寄存器,控制器,运算器
- 概率论与数理统计——多方法解决-双样本方差的F检验-Excel/SPSS
- 修改自己电脑连接的路由器的配置网址192.168.1.1
- 计算机图形学(三种画线算法)
- weiit—智慧中台,互联网生态体系构建者
- 基于奇异值分解的图像压缩matlab
- 软件园里的流氓(1)——2005年的故事
- 服务器修复oxc0000098,Win10引导文件BCD文件误删或损坏启动错误0xc0000098的解决方法...