导航:首页 > 操作系统 > linuxchat

linuxchat

发布时间:2023-06-08 14:55:46

A. 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
**发送链接**[网址]
';

B. 在Linux系统下xchat怎么用

xchat是图形化的软件,通过命令丛槐闭行应该没法使用,你需要先进入linux的图形化界面,比如KDE或者是GNOME,然后把软件安装一下,应该有类明改似install-sh的脚本,双击安装,然后到安装目录运行程序渗裂就可以了。

C. 在linux下如何用c语言来写一个socket编程的聊天小程序

源码如下:
//chat_one.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <malloc.h>
#include <sys/select.h>

int main( int argc, char **argv)
{
struct sockaddr_in chatone, chattwo;
char pmsg[1000];
char *buf;
int chatone_fd;
int ret,i;
int len, msg_len;
fd_set fdset;

if ( argc < 2 ){
printf("please input ip address\n");
return -1;
}

printf("server address is %s\n", argv[1]);

chattwo.sin_family = AF_INET;
chattwo.sin_port = htons(60002);
inet_pton(AF_INET, argv[1], &chattwo.sin_addr.s_addr);

chatone.sin_family = AF_INET;
chatone.sin_port = htons(60000);
chatone.sin_addr.s_addr = INADDR_ANY;

chatone_fd = socket(PF_INET, SOCK_DGRAM, 0);
if ( -1 == chatone_fd ){
printf("create socket failed %s\n", strerror(errno));
return -1;
}

ret = bind(chatone_fd, (struct sockaddr *)&chatone, sizeof(chatone));
if ( -1 == ret){
printf("bind failed %s \n", strerror(errno));
return -1;
}

for(i=0; i<1000;i++){
FD_ZERO( &fdset );
FD_SET ( 0, &fdset);
FD_SET( chatone_fd, &fdset);

if ( -1 == select ( chatone_fd+1, &fdset, NULL, NULL, NULL) ){
continue;
}

if ( FD_ISSET( chatone_fd, &fdset)){
recvfrom( chatone_fd, pmsg, 999, 0, NULL, 0);
printf("receive %s\n", pmsg);
}
else{
memset( pmsg, 0, 1000);
fgets(pmsg, 999, stdin);
len = sizeof(chattwo);
sendto( chatone_fd, pmsg, 1000, 0,\
(struct sockaddr*) &chattwo, len);

printf("send %s\n", pmsg);
}
}

printf("sent %d packets\n", i);

close(chatone_fd);
return 0;
}
//chat_two.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <malloc.h>
#include <sys/select.h>

int main( int argc, char **argv)
{
struct sockaddr_in chatone, chattwo;
char pmsg[1000];
char *buf;
int chattwo_fd;
int ret,i;
int len, msg_len;
fd_set fdset;

if ( argc < 2 ){
printf("please input ip address\n");
return -1;
}

printf("server address is %s\n", argv[1]);

chattwo.sin_family = AF_INET;
chattwo.sin_port = htons(60002);
chattwo.sin_addr.s_addr = INADDR_ANY;

chatone.sin_family = AF_INET;
chatone.sin_port = htons(60000);
inet_pton(AF_INET, argv[1], &chatone.sin_addr.s_addr);

chattwo_fd = socket(PF_INET, SOCK_DGRAM, 0);
if ( -1 == chattwo_fd ){
printf("create socket failed %s\n", strerror(errno));
return -1;
}

ret = bind(chattwo_fd, (struct sockaddr *)&chattwo, sizeof(chattwo));
if ( -1 == ret){
printf("bind failed %s \n", strerror(errno));
return -1;
}

for(i=0; i<1000;i++){
FD_ZERO( &fdset );
FD_SET ( 0, &fdset);
FD_SET( chattwo_fd, &fdset);

if ( -1 == select ( chattwo_fd+1, &fdset, NULL, NULL, NULL) ){
continue;
}

if ( FD_ISSET( chattwo_fd, &fdset)){
recvfrom( chattwo_fd, pmsg, 999, 0, NULL, 0);
printf("receive: %s\n", pmsg);
}
else{
memset( pmsg, 0, 1000);
fgets(pmsg, 999, stdin);
len = sizeof(chatone);
sendto( chattwo_fd, pmsg, 1000, 0,\
(struct sockaddr*) &chatone, len);

printf("send %s\n", pmsg);
}
}

printf("sent %d packets\n", i);

close(chattwo_fd);
return 0;
}
编译好这个两个程序就可以进行简单的通信了。

D. 如何在 Linux 上安装微信(非 Deepin-WeChat)

以上就是在 Linux 上安装配置微信的全部教程,如有问题欢迎在评论区留言。

E. Linux里面chatt +i file命令作用是什么

应该写错了吧?是chattr +i file 设置文件不能进行修改:即你不能删除猛禅它! +就是赋加的意思,i是保护属性 所以一起就是赋于文件保护陪亩属性 也就是不能进行修改芦知森!

F. linux 下pthread_create函数参数问题

问题出在类型转成指针上,和 tid_num应该没关系。chat 参数应该是一个原型类似于下好雀汪面的函数的函数:
void * function(void *arg)。 你友仔不应该将chat函数强制转换成岁改 void *

阅读全文

与linuxchat相关的资料

热点内容
下载压缩虐杀原形2 浏览:903
linux脚本cd 浏览:162
间架结构pdf 浏览:843
重庆农村商业银行app怎么老出问题 浏览:471
慧编程配置要求 浏览:673
数控机床编程与操作视频 浏览:461
文件夹资料误删怎么办 浏览:87
手机app怎么下载安装 浏览:492
最新的java版本 浏览:993
万卷小说缓存在哪个文件夹 浏览:687
st单片机怎样烧 浏览:871
watch怎么下载APP 浏览:821
银行程序员面试 浏览:358
我的世界的服务器为什么不能更新 浏览:769
命令与征服绝命时刻比赛视频 浏览:827
电脑捕获视频的文件夹怎么换 浏览:483
windows编译安卓软件 浏览:211
加密dns列表 浏览:990
股市操练大全八册pdf 浏览:121
c传递指针到python 浏览:164