導航:首頁 > 操作系統 > 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相關的資料

熱點內容
華為手機的方舟編譯器在哪呢 瀏覽:121
下載壓縮虐殺原形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
電腦捕獲視頻的文件夾怎麼換 瀏覽:484
windows編譯安卓軟體 瀏覽:212
加密dns列表 瀏覽:991
股市操練大全八冊pdf 瀏覽:122