资源简介
在网络聊天盛行的今天,却没有合适的聊天室在Linux系统中供用户使用。本设计实现了Linux系统下简单的网络聊天室的设计。采用Client/Server模式,使用socket套接字和多线程的应用来进行编写。可以创建多个窗口分别作为服务端和多个客户端的程序。利用vim编辑器,通过gcc命令进行编译从而实现聊天室的运行,并使用gdb调试功能进行调试。本设计的主要功能包含群聊、私聊、查看用户列表等功能。
欢迎访问我的博客www.ghackerm.me
代码片段和文件信息
#include“public.h“
pthread_t tid1;
char g_name[NAME_LEN];
int g_locate;
int g_total;
void flush(){ char c; do{c=getc(stdin);}while(c!=‘\n‘&&c!=EOF);};
int CheckExist()
{
int i;
for(i=0;i {
if(!strcmp(g_nameclientList[i].name))
break;
}
if(i {
printf(“this name: %s is already exist!!\n“g_name);
return 1;
}
else
return 0;
}
void ShowList()
{
int i;
g_total=0;
printf(“\t _____________________________ \n“);
printf(“\t| CLIENT LIST |\n“);
printf(“\t|_____________________________|\n“);
printf(“\t|\e[4m sort | name \e[24m|\n “);
// printf(“\t|_________|___________________|\n“);
for(i=0;i {
if(clientList[i].socketFd!=0)
{
if(i==g_locate)
{
printf(“\t|\e[4;31m *%-4d | %-10s \e[0m|\n“++g_totalclientList[i].name);
//printf(“\t|_________|___________________|\n“);
}
else
{
printf(“\t|\e[4m %-4d | %-10s \e[24m|\n“++g_totalclientList[i].name);
// printf(“\t|_________|___________________|\n“);
}
}
}
printf(“\t|\e[4m Total:%-3d \e[24m|\n“g_total);
}
int MakeTempList(int *tmp)
{
int in=0;
for(i=0;i {
if(clientList[i].socketFd!=0)
{ tmp[n]=i; n++; }
}
ShowList();
int select;
printf(“please select the user \n“);
if(1!=scanf(“%d“&select))
{
flush();
printf(“bad select \n“);
return -1;
}
if(select<=g_total)
{
if(tmp[select-1]==g_locate)
{
printf(“\e[33m#SYSTEM:YOU CAN NOT SELECT YOURSELF\e[0m\n“);
return -1;
}
else
return tmp[select-1];
}
else
{
printf(“bad select \n“);
return -1;
}
}
void *RecvMsg(void *fd)
{
int sockfd=*(int *)fd;
MESSAGE msg;
while(1)
{
bzero(&msgsizeof(msg)); msg.type=ERROR;
read(sockfd&msgsizeof(msg));
if(msg.type==ERROR)
break;
switch(msg.type)
{
case LOGIN:
if(msg.fromUserLocate==g_locate)
printf(“\e[34m###### > loing succeed\e[0m\n“);
else
printf(“\e[33m#LOGIN > From:%-10s Msg:%s\e[0m\n“msg.fromUsermsg.message);
break;
case EXIT:
printf(“\e[33m#EXIT > From:%-10s Msg:%s\e[0m\n“clientList[msg.fromUserLocate].namemsg.message);
break;
case PUBLIC:
printf(“\e[32m#PUBLIC > From:%-10s Msg:%s\e[0m\n“msg.fromUsermsg.message);
break;
case PRIVATE:
printf(“\e[31m#PRIVATE> From:%-10s Msg:%s\e[0m\n“msg.fromUsermsg.message);
break;
default:break;
}
memcpy(&clientList&msg.clientListsizeof(clientList));
}
printf(“server is breakdown \n“);
exit(1);
}
void SendMsg(int fd)
{
MESSAGE msg;
msg.type=LOGIN;
msg.fromUserLocate=g_locate;
strcpy(msg.fromUserg_name);
strcpy(msg.messageg_name);
write(fd&msgsizeof(msg));
int tmp[MAX_CLIENT];
int key;
while(1)
{
printf(“ 1 public 2 private 3 EXIT
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5104 2016-01-09 13:11 源代码\client.c
文件 152 2016-01-09 13:11 源代码\makefile
文件 737 2016-01-09 13:11 源代码\public.h
文件 4623 2016-01-09 13:11 源代码\server.c
目录 0 2019-06-22 09:07 源代码
----------- --------- ---------- ----- ----
10616 5
- 上一篇:IGBT模块二极管热模型
- 下一篇:bpaieee39节点程序
相关资源
- linux 命令.docx
- linux 下QT讯飞语音合成demo
- linux下查看端口是否被占用以及查看所
- socket编程常用API汇总
- arcsde10.2百度云连接linux版本
- 嵌入式uClinux应用程序的NFS开发
- 如何将windows里面的文件导入到Linux虚
- SUSE Linux Enterprise Server 11 SP4 使用
- linux安装abaqus2017破解版
- django项目使用dwebsocket案例
- 最全Linux常用命令大全.docx
- rarlinux-x64-5.5.0.tar.gz
- ADV7441 Linux 驱动源码
- SuperSocket 入门,实现客户端和服务端
- keepalived-1.2.24.tar.gz+memcached-1.4.33.tar.
- QT_的socket_与_Linux_的socket通信Linux
- Linux FTP源代码
- linux下文件及目录的监控程序
- linux下QT中文滚屏小程序
- 嵌入式LINUX基础教程中文第2版 --百度
- 基于TCP,socket通信,简单小程序
- LinuxVM虚拟机镜像.docx
- SSLSocket双向认证通信(含证书库及证
- 经典Linux系统裁剪指南
- Linux DHCP图形化管理工具
- linux下QT5十字路口红绿灯信号灯模拟程
- 跟老男孩学linux三剑客命令
- Linux下C实现的聊天室
- linux下的QT登陆界面用户名,密码
- linux2.6.32exp
评论
共有 条评论