导航:首页 > 操作系统 > linux网络聊天室实现

linux网络聊天室实现

发布时间:2023-02-14 17:56:19

linux中 socket聊天室,给客户端发消息

//下面是一个实例
/**
*socket.iochat
*
*/

varweb=require('QuickWeb');

//undefined
var_=undefined;

/**
*创建一个房间
*
*@param{string}room房间名称
*@param{socket.io}iosocket.io实例
*/
varRoom=mole.exports=function(room,io){
//初始化socket.io实例,仅在第一次创建房间时需要设置io参数
if(typeofio!='undefined')
Room.prototype.io=io;
vario=this.io;

//房间成员列表
varnicknames=this.nicknames={};
varonlinesum=this.onlinesum=0;

//握手验证,如果是登录用户,则自动获取其昵称
io.set('authorization',function(handshakeData,callback){
//通过客户端的cookie字符串来获取其session数据
varsessionObject=handshakeData.sessionObject=web.session.getByCookie(handshakeData.headers.cookie);

//如果不是登录用户,则自动为其设置一个昵称
varnickname=sessionObject.data.nickname;
if(typeofnickname!='string'||nickname=='')
nickname='#'+Math.floor(Math.random()*1000)+''+(newDate().getTime()%86400000);
sessionObject.data.nickname=nickname;

callback(null,true);
});

/**连接处理*/
varconnectionHandle=function(socket){
onlinesum++;
//获取session
varsession=socket.handshake.sessionObject.data;
varnickname=session.nickname;

//保持session,以免session过期
varhold_session=socket.handshake.sessionObject.hold;

/**刷新在线列表*/
refresh_online=function(){
varn=[];
for(variinnicknames)
n.push(i);
socket.broadcast.emit('onlinelist',n);
socket.emit('onlinelist',n);
}

//新成员加入时,通知其他成员
nicknames[nickname]=socket;
refresh_online();
socket.broadcast.emit('systemmessage',nickname+'回来了,大家赶紧去喷他~~');

/**公共消息*/
socket.on('publicmessage',function(msg,cb){
hold_session();
vartimestamp=newDate().getTime();
socket.broadcast.emit('publicmessage',nickname,msg,timestamp);
cb();
});

/**私人消息*/
socket.on('privatemessage',function(to,msg,cb){
hold_session();
vartimestamp=newDate().getTime();
varerr='';
for(variinto){
vartarget=nicknames[to[i]];
if(target){
cb();
target.emit('privatemessage',nickname,msg,timestamp);
}
else{
err+='“'+to[i]+'”不在线 ';
}
}
if(err!='')
cb(err);
});

/**断开来连接*/
socket.on('disconnect',function(){
deletenicknames[nickname];
onlinesum--;
socket.broadcast.emit('systemmessage',nickname+'悄悄地离开了。。。');
refresh_online();
});

/**命令*/
socket.on('command',function(args,cb){
if(args.length<1){
cb('无效的命令');
return;
}
switch(args[0]){
/*查询或更改昵称*/
case'nick':
varnick=args[1];
if(typeofnick=='undefined')
cb(_,'你的昵称是:'+nickname);
else
if(nick==nickname)
cb('你的昵称本来就是“'+nick+'”嘛,不需要改');
elseif(nicknameIsUsed(nick))
cb('昵称“'+nick+'”已被占用');
else{
nicknames[nick]=nicknames[nickname];
deletenicknames[nickname];
varoldnick=nickname;
session.nickname=nickname=nick;
cb(_,'昵称已更改为“'+nick+'”');
//通知其他人
refresh_online();
socket.broadcast.emit('systemmessage','“'+oldnick+'”的昵称已改为“'+nick+'”');
}
break;

/*在线人数*/
case'online':
cb(_,'当前共有'+onlinesum+'个人在线');
break;

/*帮助*/
default:
cb(_,strHelp);
}
});
}

/*注册聊天室*/
if(typeofroom=='undefined')
room='';
io.of('/'+room).on('connection',connectionHandle);


/**检查昵称是否被占用*/
varnicknameIsUsed=function(nickname){
for(variinnicknames)
if(i==nickname)
returntrue;
returnfalse;
}
}

varstrHelp='输入$help获取帮助
=========系统命令========
**$nick**[昵称]查看或更改昵称
**$online**当前在线人数
**$clear**清空消息
=========使用技巧========
**给某人发送消息**@对方昵称消息内容(可同时@多个人)
**发送图片**!图片url
**发送链接**[网址]
';

❷ Linux下Socket网络编程聊天室 程序运行后出错,服务器端显示 accept:invalid argument.多谢啦!

参数不正确

❸ linux下网络编程聊天室联系人怎么存储

多种解决方案 1、简单实现,用户对用户传,可以通过p2p实现 2、如果想保存文件,首先将文件保存至服务器,然后用户通过服务器提供地址进行下载

❹ 我想在自己的linux系统上弄个聊天室具体该怎么操作

看了你的补充,是 web架设是非常简单,可是安装源码更简单啊 ,

第一 这种发布的都有安装指南, 只要本地的a+p+m环境设置好了, 按照安装指南一步一步来即可 ,比搭建web简单多了
第二 源码放到apache的DocumentRoot文件夹下面 默认的是 /var/www/
第三 具体的一般要修改 httpd.conf , 这个你找点网站部署的文章来看比较好 我也不发挥复制粘贴的功能了

_________________________________________________

呵呵 你的问题其实也就是搭建 apache + php + mysql 网站运行环境

❺ 如何编写linux聊天室

自从开始学linux网络编程后就想写个聊天室,一开始原本打算用多进程的方式来写,可是发觉进程间的通信有点麻烦,而且开销也大,后来想用多线程能不能实现呢,于是便去看了一下linux里线程的用法,实际上只需要知道 pthread_create 就差不多了,于是动手开干,用了两天时间,调试的过程挺痛苦的,一开始打算用纯C来撸,便用简单的数组来存储客户端的连接信息,可是运行时出现了一些很奇怪的问题,不知道是不是访问了临界资源,和线程间的互斥有关等等;奇怪的是,当改用STL的set或map时问题就解决了,但上网搜了下发现STL也不是线程安全的,至于到底是什么问题暂时不想去纠结了,可能是其它一些小细节的错误吧。先贴上代码:

首先是必要的头文件 header.h:

#!/usr/bin/env python#-*- coding: utf-8 -*-from PyQt4 import QtGui, QtCoreimport sysimport socketimport threadclass Client(QtGui.QWidget):

BUF_LEN = 1024 def __init__(self, parent=None):

QtGui.QWidget.__init__(self, parent)

self.setWindowTitle(u'TCP客户端')
self.resize(600, 500)
self.center()
layout = QtGui.QGridLayout(self)

label_ip = QtGui.QLabel(u'远程主机IP:')
layout.addWidget(label_ip, 0, 0, 1, 1)
self.txt_ip = QtGui.QLineEdit('127.0.0.1')
layout.addWidget(self.txt_ip, 0, 1, 1, 3)

label_port = QtGui.QLabel(u'端口:')
layout.addWidget(label_port, 0, 4, 1, 1)
self.txt_port = QtGui.QLineEdit('9003')
layout.addWidget(self.txt_port, 0, 5, 1, 3)

self.isConnected = False
self.btn_connect = QtGui.QPushButton(u'连接')
self.connect(self.btn_connect, QtCore.SIGNAL( 'clicked()'), self.myConnect)
layout.addWidget(self.btn_connect, 0, 8, 1, 2)

label_recvMessage = QtGui.QLabel(u'消息内容:')
layout.addWidget(label_recvMessage, 1, 0, 1, 1)

self.btn_clearRecvMessage = QtGui.QPushButton(u'↓ 清空消息框')
self.connect(self.btn_clearRecvMessage, QtCore.SIGNAL( 'clicked()'), self.myClearRecvMessage)
layout.addWidget(self.btn_clearRecvMessage, 1, 7, 1, 3)

self.txt_recvMessage = QtGui.QTextEdit()
self.txt_recvMessage.setReadOnly(True)
self.txt_recvMessage.setStyleSheet('background-color:yellow')
layout.addWidget(self.txt_recvMessage, 2, 0, 1, 10)

lable_name = QtGui.QLabel(u'姓名(ID):')
layout.addWidget(lable_name, 3, 0, 1, 1)
self.txt_name = QtGui.QLineEdit()
layout.addWidget(self.txt_name, 3, 1, 1, 3)

self.isSendName = QtGui.QRadioButton(u'发送姓名')
self.isSendName.setChecked(False)
layout.addWidget(self.isSendName, 3, 4, 1, 1)

label_sendMessage = QtGui.QLabel(u' 输入框:')
layout.addWidget(label_sendMessage, 4, 0, 1, 1)
self.txt_sendMessage = QtGui.QLineEdit()
self.txt_sendMessage.setStyleSheet("background-color:cyan")
layout.addWidget(self.txt_sendMessage, 4, 1, 1, 7)
self.btn_send = QtGui.QPushButton(u'发送')
self.connect(self.btn_send, QtCore.SIGNAL('clicked()'), self.mySend)
layout.addWidget(self.btn_send, 4, 8, 1, 2)

self.btn_clearSendMessage = QtGui.QPushButton(u'↑ 清空输入框')
self.connect(self.btn_clearSendMessage, QtCore.SIGNAL( 'clicked()'), self.myClearSendMessage)
layout.addWidget(self.btn_clearSendMessage, 5, 6, 1, 2)
self.btn_quit = QtGui.QPushButton(u'退出')
self.connect(self.btn_quit, QtCore.

❻ linux C语言 TCP 多线程 简易聊天室

你accept得到一个新的连接后,再创建线程(把连接socket传给线程),用这个线程专门接收这个连接的数据,就不会有问题了。

❼ 基于linux的即时通信公共聊天室,实现文字通信功能,并具有注册和登录功

如果楼主想要运用到实际中的话,最好还是对传输的数据加密! 这里抛开这些看你的问题,其实也简单 !
就是通过socket套接字,将注册时密码和用户名的数据保存到文件中,可能楼主的问题就是在于如何保存,才能好读取或者对应读取吧! 如果是这样不放最后将他们连在一起(不过加一个特定的字符将其隔开),提取的时候再分割就好了!

1 登陆时,每次输入用户名好密码,读取保存用户和密码的文件(可以封装成结构体,整个结构体写入文件),并进行比较和判断
2 注册时,追加写入你的用户和密码

可每次写入用户和密码封装好的结构体数据

❽ 怎样将基于linux的网络聊天室怎样在开发板上实现

1. 建议lz使用socket套接字。这个方式可以很好的实现client/server模式,tcp和udp协议都可以选择。使用socket来实现两台电脑的进程间通信,要先理解一些函数,如socket,binder,listen,connect,recv,send等等。。。
2. lz可以上网搜索关键字“linux socket编程

❾ linux多人聊天室是如何实现的

多人聊天室可通过保持网络连接、保持进程运行保持通信。想要自己搭建多人聊天室其实也很简单,你可以直接用ZEGO即时通讯,内置文本、图片、语音、视频、地理位置等各种消息类型,支持单聊、群聊、房间聊天,自由组合IM能力,也可针对自身业务场景,定制所需服务规格。

阅读全文

与linux网络聊天室实现相关的资料

热点内容
c语言编程如何做标记 浏览:882
python数据分析实战pdf 浏览:983
u盘插入文件夹 浏览:916
华为amd云服务器 浏览:495
汉化编程卡是什么意思 浏览:126
python学习pdf 浏览:313
祝绪丹程序员那么可爱拍吻戏 浏览:198
asp源码会员消费系统 浏览:113
java反射设置 浏览:152
python一行文 浏览:439
排序算法优缺点 浏览:563
恶搞加密文件pdf 浏览:674
gif怎么压缩图片大小 浏览:217
命令选择当前不可用 浏览:158
欧几里得算法如何求逆元 浏览:506
男中学生上课解压神器 浏览:373
加密狗拔掉之后怎么办 浏览:27
云储存平台源码 浏览:847
解压文件苹果手机rar 浏览:149
centos开机命令行模式 浏览:697