做一个linux的聊天软件,虽然没什么创意,但是它可以用来锻炼和测试我对网络编程的掌握程度,也借此机会做一些有意思的程序。

这里做的是linux下一个命令行的客户端与服务器的聊天程序,没写界面,因为对qt不太熟,纯命令行朴素点,但是对于网络编程使用到就足够了。

这个程序实现了基本的用户注册登录功能,信息发送与接收功能,未读信息存入数据库并在用户登录时获取。

另外,使用了mysql作为存储的数据库,存储着用户注册的信息与用户之间发送的消息。

服务器负责接收客户端的一切请求,对于每个客户端进程都新建一个子进程,然后对客户端发送的特定格式的消息进行不同的回应。有注册、登录、客户在线的通知、获取信息请求、发送信息请求、查询在线、退出这几种消息。

客户端接受命令行的操作,然后向服务器发送特定格式的tcp消息,再接收服务器得来的信息。在客户端登录成功之后,除了本进程用于接收命令操作外,还新建两个子进程,用于定时通知服务器当前用户在线,还有定时从服务器获取未读消息。曾经考虑过应该是客户端等待服务器新信息的通知,还是客户端向服务器查询新的信息,为了统一由客户端发出请求,所以选择了后者。另外虽然这样会有消息获取延迟,但只要从服务器获取消息的查询间隔比较小,如1秒,这延时是可以接收和忽略的。

首先打开客户端后输入regist进行注册或者login进行登录,接着分别是输入用户名和密码。选择登录并且登录成功之后,可以输入命令来和其他用户聊天。

s user text:向user指定的用户发送一行信息,服务器只是将这个信息存入mysql而不是直接交付给该用户,该用户通过获取信息子进程从服务器得到信息。

o:查询在线的用户名单。

q:退出客户端。

jchat:linux聊天程序1:简介的更多相关文章

  1. jchat:linux聊天程序2:MySQL

    该软件使用的数据库为MySQL,因为它免费.开源,在linux下几乎就是最好的选择. 首先要在mysql中root用户新建数据库并赋权给本用户: create database jchat; gran ...

  2. 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 * ...

  3. 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 ...

  4. Node.js + Web Socket 打造即时聊天程序嗨聊

    前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...

  5. 剖析 Linux hypervisor--KVM 和 Lguest 简介

    慢慢弄清楚..   M. Tim Jones, 顾问工程师, Emulex Corp. M. Tim Jones 是一名嵌入式软件工程师,他是 Artificial Intelligence: A S ...

  6. 【Python】iichats —— 命令行下的局域网聊天程序

    转载请声明出处:http://www.cnblogs.com/kevince/p/3941728.html   ——By Kevince ii系列工具第三弹,命令行下的局域网聊天程序 原理: 程序启动 ...

  7. Android IPC机制(五)用Socket实现跨进程聊天程序

    1.Socket简介 Socket也称作“套接字“,是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信.它分为流式套接字和数据包套接 ...

  8. Linux磁盘和文件系统简介

    Linux磁盘和文件系统简介 1.文件系统:存储设备上存储数据的方式方法 磁盘主要由盘片.机械手臂.磁头和主轴马达组成,而数据的写入实际是写在盘片上,磁盘的最小存储单位为扇区,每个扇区为512字节,扇 ...

  9. Linux 内核引导选项简介

    Linux 内核引导选项简介 作者:金步国 连接地址:http://www.jinbuguo.com/kernel/boot_parameters.html 参考参数:https://www.cnbl ...

随机推荐

  1. C++标准程序库读书笔记-第四章通用工具

    1.Pairs(对组) (1)class pair可以将两个值视为一个单元.任何函数需返回两个值,也需要pair. (2)便捷地创建pair对象可以使用make_pair函数 std::make_pa ...

  2. phpstorm8 配置svn

    步骤1 步骤2. 步骤3.

  3. IE8的项目在IE11下 一些功能无法实现的解决方案

    最近改了一些IE11下一些功能无法实现的项目,发现了有一些IE8下的方法 ,在IE11下被取消或者替代了,如下: 1.JavaScript 运行时错误: 对象不支持“attachEvent”属性或方法 ...

  4. Javascript-数据类型、类型转换

    typeof 判断数据类型: var n = 1; var t = "echo"; var fn = function() {} var arr = [1,2,3]; typeof ...

  5. Android上使用OpenglES2.0遇到的一点问题

    按照教程开发OpenglES2.0应用,遇到Logcat报错“Called unimplemented OpenGL ES API” 在论坛和stackoverflow上找到了答案. 1.manife ...

  6. Mfgtool

    For bootstrap mode, it refers to the communcation between the host and ROM codes through serial down ...

  7. MVC 分页获取数据 及点选按钮

    @model PagedList<Lyxm.Entity.Suggestion>@using Webdiyer.WebControls.Mvc <div>    <ul ...

  8. QT:程序忙碌时的进度条——开启时间循环,等结束的时候再退出

    当程序在执行一项(或多项)耗时比较久的操作时,界面总要有一点东西告诉用户“程序还在运行中”,那么,一个“没有终点”的进度条就是你需要的了.PS:最好把耗时的操作扔到一个子线程中去,以免他阻塞了界面线程 ...

  9. HDOJ-1042 N!(大数乘法)

    http://acm.hdu.edu.cn/showproblem.php?pid=1042 题意清晰..简单明了开门见山的大数乘法.. 10000的阶乘有35000多位 数组有36000够了 # i ...

  10. Android工程师面试准备知识点

    听+7哥说,把下面的全弄懂,面试必过,所以我就试着去把所有题目补充了一下,各位能耐的网友们,如果有吐槽或者补充的尽管给我留言,在这里谢过大家了. 1.   android的多线程如何通信 答:Andr ...