jchat:linux聊天程序1:简介
做一个linux的聊天软件,虽然没什么创意,但是它可以用来锻炼和测试我对网络编程的掌握程度,也借此机会做一些有意思的程序。
这里做的是linux下一个命令行的客户端与服务器的聊天程序,没写界面,因为对qt不太熟,纯命令行朴素点,但是对于网络编程使用到就足够了。
这个程序实现了基本的用户注册登录功能,信息发送与接收功能,未读信息存入数据库并在用户登录时获取。
另外,使用了mysql作为存储的数据库,存储着用户注册的信息与用户之间发送的消息。
服务器负责接收客户端的一切请求,对于每个客户端进程都新建一个子进程,然后对客户端发送的特定格式的消息进行不同的回应。有注册、登录、客户在线的通知、获取信息请求、发送信息请求、查询在线、退出这几种消息。
客户端接受命令行的操作,然后向服务器发送特定格式的tcp消息,再接收服务器得来的信息。在客户端登录成功之后,除了本进程用于接收命令操作外,还新建两个子进程,用于定时通知服务器当前用户在线,还有定时从服务器获取未读消息。曾经考虑过应该是客户端等待服务器新信息的通知,还是客户端向服务器查询新的信息,为了统一由客户端发出请求,所以选择了后者。另外虽然这样会有消息获取延迟,但只要从服务器获取消息的查询间隔比较小,如1秒,这延时是可以接收和忽略的。
首先打开客户端后输入regist进行注册或者login进行登录,接着分别是输入用户名和密码。选择登录并且登录成功之后,可以输入命令来和其他用户聊天。
s user text:向user指定的用户发送一行信息,服务器只是将这个信息存入mysql而不是直接交付给该用户,该用户通过获取信息子进程从服务器得到信息。
o:查询在线的用户名单。
q:退出客户端。
jchat:linux聊天程序1:简介的更多相关文章
- jchat:linux聊天程序2:MySQL
该软件使用的数据库为MySQL,因为它免费.开源,在linux下几乎就是最好的选择. 首先要在mysql中root用户新建数据库并赋权给本用户: create database jchat; gran ...
- jchat:linux聊天程序4:客户端
makefile: jchat: main.o login.o regist.o tcp.o gcc -w main.o login.o regist.o tcp.o -o jchat rm -f * ...
- jchat:linux聊天程序3:服务器
makefile: jchat_server: main.o process.o sql.o gcc -o jchat_server main.o process.o sql.o -L/usr/lib ...
- Node.js + Web Socket 打造即时聊天程序嗨聊
前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...
- 剖析 Linux hypervisor--KVM 和 Lguest 简介
慢慢弄清楚.. M. Tim Jones, 顾问工程师, Emulex Corp. M. Tim Jones 是一名嵌入式软件工程师,他是 Artificial Intelligence: A S ...
- 【Python】iichats —— 命令行下的局域网聊天程序
转载请声明出处:http://www.cnblogs.com/kevince/p/3941728.html ——By Kevince ii系列工具第三弹,命令行下的局域网聊天程序 原理: 程序启动 ...
- Android IPC机制(五)用Socket实现跨进程聊天程序
1.Socket简介 Socket也称作“套接字“,是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信.它分为流式套接字和数据包套接 ...
- Linux磁盘和文件系统简介
Linux磁盘和文件系统简介 1.文件系统:存储设备上存储数据的方式方法 磁盘主要由盘片.机械手臂.磁头和主轴马达组成,而数据的写入实际是写在盘片上,磁盘的最小存储单位为扇区,每个扇区为512字节,扇 ...
- Linux 内核引导选项简介
Linux 内核引导选项简介 作者:金步国 连接地址:http://www.jinbuguo.com/kernel/boot_parameters.html 参考参数:https://www.cnbl ...
随机推荐
- GPS坐标转换
由于经常涉及到GPS程序的编写,现在貌似这个GPS是越来越火,越来越多的朋友在编写GPS程序,估计是个人都会遇到这个GPS坐标转换的问题,很惭愧的是,作为一个测量专业出身的学生,我还得时不时的要把这些 ...
- 深入浅析mysql引擎
mysql引擎 mysql数据库引擎取决于mysql在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译mysql.在缺省情况下,mysql支持三个引擎:ISAM,MYISAM和HEAP.另 ...
- java 简单的文件上传
一.文件上传原理: 1.文件上传的前提: a.form表单的method必须是post b.form表单的enctype必须是multipart/form-data(决定了POST请求方式,请求正文的 ...
- Linux Power(一): kernel/power/earlysuspend.c
/* kernel/power/earlysuspend.c * * Copyright (C) 2005-2008 Google, Inc. * * This software is license ...
- (转)ArcGIS Engine中的Symbols详解
本文来源:http://blog.csdn.net/mengdong_zy/article/details/8980842 文章作者真是个好人啊!!!!!!!! 原文如下: Symbols Symbo ...
- 轻松背后的N+疲惫——系统日志
相信很多coder都有这样的癖好:“自恋”!!对自己编写的code总是那么的自信,自豪,Always believe it to be so perfect!! 不喜欢做单元测试(总觉得它就那样了能出 ...
- SignalR实现实时日志监控
.net SignalR实现实时日志监控 摘要 昨天吃饭的时候,突然想起来一个好玩的事,如果能有个页面可以实时的监控网站或者其他类型的程序的日志,其实也不错.当然,网上也有很多成熟的类似的监控系统 ...
- Vector, ArrayList, Array
JAVA新手在使用JAVA的时候大概都会遇到这个问题: JAVA中的Array, ArrayList, Vector, List, LinkedList有什么样的区别?尤其是Vector, Array ...
- 并发(Concurrency)和并行(Parallelism)的区别
最近在读<real world haskell>里关于并行的一章时,看到作者首先对并发(Concurrency)和并行(Parallelism)的区别进行了定义和解释.以前我对这个问题也是 ...
- adb 异常报错----adb server is out of date. killing... ADB server didn't ACK * failed to start daemon *
在Eclipse进行android开发的时候,由于要启动adb,但有时候其他的程序启动会占用adb程序的端口,这时候在对android程序进行调试的时候就会出现报错: 究其原因就是因为其他程序占用了a ...