jchat:linux聊天程序1:简介

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

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

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

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

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

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

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

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

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

q:退出客户端。

时间: 2024-10-09 09:12:53

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

jchat:linux聊天程序2:MySQL

该软件使用的数据库为MySQL,因为它免费.开源,在linux下几乎就是最好的选择. 首先要在mysql中root用户新建数据库并赋权给本用户: 1 create database jchat; 2 grant all on jchat.* to 'huanglianjing'; 然后登录mysql的huanglianjing用户添加数据表: 用户表: 1 create table user 2 ( 3 user varchar(20) not null, 4 passwd varchar(20

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/mysql -lmysqlclient rm -f *.o *.gch *~ main.o: main.c process.h sql.h gcc -c main.c process.h sql.h -I/usr/include/mysql process.o: process.h process

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 *.o *.gch *~ main.o: main.c login.h regist.h tcp.h gcc -w -c main.c login.h regist.h tcp.h login.o: login.c login.h tcp.h gcc -w -c login.c login.h tcp

Linux下C语言多线程,网络通信简单聊天程序

原文:Linux下C语言多线程,网络通信简单聊天程序 功能描述:程序应用多线程技术,可是实现1对N进行网络通信聊天.但至今没想出合适的退出机制,除了用Ctr+C.出于演示目的,这里采用UNIX域协议(文件系统套接字),程序分为客户端和服务端.应用select函数来实现异步的读写操作. 先说一下服务端:首先先创建套接字,然后绑定,接下进入一个无限循环,用accept函数,接受“连接”请求,然后调用创建线程函数,创造新的线程,进入下一个循环.这样每当有一个新的“连接”被接受都会创建一个新的线程,实现

Linux 下基于多线程服务器/客服端聊天程序源码

Linux 下基于多线程服务器/客服端聊天程序,采用阻塞的socket技术,和多线程技术实现. 客服端程序:client.c #include<stdio.h> #include<stdlib.h> #include<string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h>

一个hello/hi的简单的网络聊天程序和python Socket API与Linux Socket API之间的关系

1.Socket概述 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接字是IP地址与端口的组合. 套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点.通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡的传输介质将这段信息发送给另一台主机的Socket中,使这段信息能传送到

通过基于java实现的网络聊天程序分析java中网络API和Linux Socket API关系

1. 引言 socket网络编程,可以指定不同的通信协议,在这里,我们使用TCP协议实现基于java的C/S模式下“hello/hi”网络聊天程序 2. 目标 1). 通过该网络聊天程序,了解java Socket API接口的基本用法 2). java Socket API简要介绍 3). linux socket API 简单分析 4). tcp协议的连接和终止 5). 探究java socket API 和 linux socket api之间的关系 3. linux socket API

嵌入式linux应用程序调试方法

嵌入式linux应用程序调试方法 四 内存工具 17 4.1 MEMWATCH 17 4.2 YAMD 22 4.3 Electric Fence 24 五 C/C++代码覆盖.性能profiling工具 24 5.1 用gcov来测试代码覆盖率 25 5.2 使用gprof来优化你的C/C++程序 35 四 内存工具 您肯定不想陷入类似在几千次调用之后发生分配溢出这样的情形. 许多小组花了许许多多时间来跟踪稀奇古怪的内存错误问题.应用程序在有的开发工作站上能运行,但在新的产品工作站上,这个应用

Linux驱动程序工作原理简介

转自:http://blog.sina.com.cn/s/blog_55465b470100ri1e.html 一.linux驱动程序的数据结构      二.设备节点如何产生?      三.应用程序是如何访问设备驱动程序的?      四.为什么要有设备文件系统?      五.设备文件系统如何实现?      六.如何使用设备文件系统?      七.具体设备驱动程序分析      1.      驱动程序初始化时,要注册设备节点,创建子设备文件      2.      驱动程序卸载时要