❶ 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能力,也可针对自身业务场景,定制所需服务规格。