• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 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


评论

共有 条评论