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 *