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

  • 大小: 4KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-18
  • 語言: 其他
  • 標簽: linux??socket??

資源簡介

在網絡聊天盛行的今天,卻沒有合適的聊天室在Linux系統中供用戶使用。本設計實現了Linux系統下簡單的網絡聊天室的設計。采用Client/Server模式,使用socket套接字和多線程的應用來進行編寫。可以創建多個窗口分別作為服務端和多個客戶端的程序。利用vim編輯器,通過gcc命令進行編譯從而實現聊天室的運行,并使用gdb調試功能進行調試。本設計的主要功能包含群聊、私聊、查看用戶列表等功能。 歡迎訪問我的博客www.ghackerm.me

資源截圖

代碼片段和文件信息

#include“public.h“

pthread_t?tid1;
char?g_name[NAME_LEN];
int??g_locate;
int??g_total;

void?flush(){?char?c;?do{c=getc(stdin);}while(c!=‘\n‘&&c!=EOF);};
int?CheckExist()
{

int?i;
for(i=0;i {

if(!strcmp(g_nameclientList[i].name))
break;
}

if(i {
printf(“this?name:?%s?is?already?exist!!\n“g_name);
return?1;
}
else
return?0;
}
void??ShowList()
{
int?i;
g_total=0;
?????????????????printf(“\t?_____________________________?\n“);
?????????????????printf(“\t|?????????CLIENT?LIST?????????|\n“);
?????????????????printf(“\t|_____________________________|\n“);
?????printf(“\t|\e[4m??sort???|??????name?????????\e[24m|\n?“);
????????????????//?printf(“\t|_________|___________________|\n“);
??for(i=0;i??{

???? if(clientList[i].socketFd!=0)
???? {
???????if(i==g_locate)
???{
?????printf(“\t|\e[4;31m?*%-4d???|??%-10s???????\e[0m|\n“++g_totalclientList[i].name);
?????????????????//printf(“\t|_________|___________________|\n“);
???}
???else
???{
?????????printf(“\t|\e[4m???%-4d??|??%-10s???????\e[24m|\n“++g_totalclientList[i].name);
?????????????//????printf(“\t|_________|___________________|\n“);
???}
???? }
???}

?????????????????printf(“\t|\e[4m????????????????Total:%-3d????\e[24m|\n“g_total);
}
int?MakeTempList(int?*tmp)
{
int?in=0;
??for(i=0;i??{
?if(clientList[i].socketFd!=0)
?????{ tmp[n]=i;?n++;?}
??}
????ShowList();

int?select;
printf(“please?select?the?user?\n“);
if(1!=scanf(“%d“&select))
{
flush();
printf(“bad?select?\n“);
return?-1;
}
if(select<=g_total)????
{
if(tmp[select-1]==g_locate)
{
printf(“\e[33m#SYSTEM:YOU?CAN?NOT?SELECT?YOURSELF\e[0m\n“);
return?-1;
}
else
return?tmp[select-1];
}
else
{
printf(“bad?select?\n“);
return?-1;
}

}
void?*RecvMsg(void?*fd)
{

int?sockfd=*(int?*)fd;
MESSAGE?msg;
????
while(1)
{
bzero(&msgsizeof(msg));?msg.type=ERROR;
read(sockfd&msgsizeof(msg));

if(msg.type==ERROR)
break;
switch(msg.type)
{

?????????case?LOGIN:
?if(msg.fromUserLocate==g_locate)
?printf(“\e[34m######??>?loing?succeed\e[0m\n“);
?else
?printf(“\e[33m#LOGIN??>?From:%-10s?Msg:%s\e[0m\n“msg.fromUsermsg.message);
?break;
?case?EXIT:
?printf(“\e[33m#EXIT???>?From:%-10s?Msg:%s\e[0m\n“clientList[msg.fromUserLocate].namemsg.message);
?break;
?case?PUBLIC:
?printf(“\e[32m#PUBLIC?>?From:%-10s?Msg:%s\e[0m\n“msg.fromUsermsg.message);
?break;
?case?PRIVATE:
?printf(“\e[31m#PRIVATE>?From:%-10s?Msg:%s\e[0m\n“msg.fromUsermsg.message);
?break;
?default:break;

}
memcpy(&clientList&msg.clientListsizeof(clientList));

}

printf(“server?is?breakdown?\n“);
exit(1);

}

void?SendMsg(int?fd)
{
?
MESSAGE?msg;
????msg.type=LOGIN;
msg.fromUserLocate=g_locate;
strcpy(msg.fromUserg_name);
strcpy(msg.messageg_name);
????write(fd&msgsizeof(msg));

int?tmp[MAX_CLIENT];
int??key;
while(1)
{??

????????printf(“?1?public??2?private?3?EXIT

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????5104??2016-01-09?13:11??源代碼\client.c

?????文件????????152??2016-01-09?13:11??源代碼\makefile

?????文件????????737??2016-01-09?13:11??源代碼\public.h

?????文件???????4623??2016-01-09?13:11??源代碼\server.c

?????目錄??????????0??2019-06-22?09:07??源代碼

-----------?---------??----------?-----??----

????????????????10616????????????????????5


評論

共有 條評論