91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

linux下的網(wǎng)絡(luò)編程,使用C語言,實現(xiàn)多人會話聊天室, 具體功能包括: 注冊與登錄系統(tǒng),群聊,私聊,在線用戶查詢,管理員管理賬戶(踢下線,禁言,提升或降低權(quán)限)

資源截圖

代碼片段和文件信息

#include?“chat.h“
int?socketfd;??//套接字描述符
//菜單提示的數(shù)據(jù)結(jié)構(gòu)???
typedef?struct?{
char?cmd[40]; //format
char?explain[100];//description
int??admin; //authority
}usage;
int?global_admin_flag=NORMAL_USER;???//用戶的權(quán)限標(biāo)記,默認(rèn)為0
int?globel_is_shutup;??? //用戶是否被禁言的標(biāo)記?默認(rèn)為0
??
//0為普通用戶具有的執(zhí)行權(quán)限?,1為管理員具有的執(zhí)行權(quán)限?。
?usage?help_menu[]?=?{
{“format“? ????????“\tdescription“0}
{“>信息“? ??????“\t\t與所有在線用戶聊天“0}
{“:用戶名>信息“ ????“\t選擇用戶聊天“0}
{“--online“????????????“\t顯示在線用戶“0}
{“--help“???????????????“\t\t顯示幫助信息“0}
{“exit“ ????????????“\t\t退出“0}
{“#kick:user“??????????“\t用戶下線“1}
{“#shutup:user“????????“\t禁止用戶發(fā)言,5分鐘后可自行解除禁止“?1}
{“#advanded:user“ ????“\t提升用戶為管理員“?1}
{“#normal:user“? ??????“\t降級管理員為普通用戶“?1}
{000}
};?

pthread_mutex_t??mutex?=?PTHREAD_MUTEX_INITIALIZER;

int?main(int?argc?char?*argv[])
{
??signal(SIGINT?signHandler);?
inits();
close(socketfd);
return?0;
}
//初始化鏈接
void??inits()
{
struct?sockaddr_in???server;
if((socketfd=socket(AF_INETSOCK_STREAM0))==-1)
{
?????????perror(“creat?socket?error\n“);
?????????exit(1);
????}
bzero(&server?sizeof(server));
//memset(&server0sizeof(server));
//?bzero(&(server.sin_zero)8);??
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
inet_pton(AF_INETIP&server.sin_addr);
if((?connect(socketfd(struct?sockaddr?*)&serversizeof(struct?sockaddr)))==-1)
{
?????????perror(“connect?error\n“);
?????????exit(1);
????}?
reg_log();?//????login?or?register
pthread_t?tid;//線程標(biāo)識符?pthread_t?
if((pthread_create(&tidNULLpthread_fun&socketfd))==-1)
/*int?pthread_create?(pthread_t?*?thread_id,? __const?pthread_attr_t?*?__attr
? void?*(*__start_routine)?(void?*)
void?*__restrict?__arg)
線程標(biāo)識符?pthread_t?
第一個參數(shù)為指向線程標(biāo)識符的指針;
第二個參數(shù)用來設(shè)置線程屬性,若取NULL,則生成默認(rèn)屬性的子線程;
第三個參數(shù)是線程運行函數(shù)的起始地址,該函數(shù)是線程體函數(shù),即子線程將完成的工作;
第四個參數(shù)用來設(shè)定線程體函數(shù)的參數(shù)?;若函數(shù)體不需要參數(shù),則最后一個參數(shù)設(shè)為NULL。
*/
print_err(“client?pthread_create()?error“);
??? writedata();
}
//顯示菜單項
void?show_menu()
{
int?i?=?0;
printf(“*********************************************\n“);
for(;?help_menu[i].cmd[0]?!=?0;?i++)
{
??if(global_admin_flag==ADMIN_USER)?//管理員
?? printf(“*\t%s\t\t%s\n“?help_menu[i].cmd?help_menu[i].explain);
??else?if(help_menu[i].admin==NORMAL_USER)//普通用戶
??? printf(“*\t%s\t\t%s\n“?help_menu[i].cmd?help_menu[i].explain);
}
printf(“********************************************\n“);
}
//進(jìn)行選擇注冊或登陸?。
void?reg_log()
{
char?ch;
printf(“1:注冊;\t2:登錄\n“);
printf(“請選擇:“);
while(1)
{
ch=getchar();
if(ch==‘2‘)
{
int?get_ret=0;
?? while(1)
{?
login();
read(socketfd&get_retsizeof(get_ret));
if(get_ret==NORMAL_USER_LOGIN_SUCCESS)//1
{
printf(“用戶您已成功登錄。歡迎您!\n\n“);
global_admin_flag?=NORMAL_USER;//0普通用戶
????show_menu();//顯示菜單
break;
}
else?if(get_ret==ADMIN_LOGIN_SUCCESS)//3
{?
printf(“管理員您已成功登錄。歡迎您!\n\n“);
global_admin_flag?=ADMIN_USER;//1管理員
????show_menu();
break;
}
else?if(get_ret==NORMAL_USER_LOGIN_FAILED_

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2013-11-30?20:25??chat\
?????文件????????3996??2013-11-29?16:31??chat\chat.h
?????文件????????3989??2013-11-29?16:30??chat\chat.h~
?????文件???????14334??2013-11-29?16:37??chat\client
?????文件????????9157??2013-11-29?16:36??chat\client.c
?????文件????????9153??2013-11-29?16:25??chat\client.c~
?????文件?????????132??2013-11-29?16:04??chat\makefile~
?????文件???????21589??2013-11-29?16:36??chat\server
?????文件???????19064??2013-11-29?16:32??chat\server.c
?????文件???????19058??2013-11-29?16:32??chat\server.c~
?????文件?????????201??2013-11-29?17:09??chat\userinfo

評論

共有 條評論