当前位置: 技术问答>linux和unix
写了一个linux下即使聊天程序,聊天部分出现一个问题
来源: 互联网 发布时间:2017-04-20
本文导语: 刚学linux编程不久,就急着上手写点东西,现在写到对话部分,群聊是没问题,就私聊遇到问题,这里将输入的首字母作为区分,‘#’为群聊,‘$’为私聊,以下是服务端和客户端部分代码, int speakall(LinkList L,c...
刚学linux编程不久,就急着上手写点东西,现在写到对话部分,群聊是没问题,就私聊遇到问题,这里将输入的首字母作为区分,‘#’为群聊,‘$’为私聊,以下是服务端和客户端部分代码,
int speakall(LinkList L,char buf[],int size)//群聊函数。链表节点为存储用户的信息结构体
{
LinkList p;
int socket;
if(!L)
return -1;
p=L->next;
while(p!=NULL)
{
if(p->user.state==1)
{
socket=p->user.mysockfd;
sendto_client(&socket,buf,size);
}
p=p->next;
}
}
int chat_server(int *socket,char name[])
{
int i;
int len;
int running=1,recvsize;
char filepath[60];
int filesocket;
struct tm *pt;
time_t t;
char option;
char buf1[MAX_RECVSIZE];
char buf2[MAX_TEXTSIZE];
char id[10];
int destsocket;
memset(buf2,0,MAX_TEXTSIZE);
sprintf(buf2,"%s 上线 !n",name);
speakall(L,buf2,strlen(buf2));
while(1)
{
memset(id,0,10);
memset(buf1,0,MAX_RECVSIZE);
memset(buf2,0,MAX_TEXTSIZE);
memset(filepath,0,60);
if((recvsize=recv(*socket,buf1,MAX_RECVSIZE,0))tm_hour,pt->tm_min,pt->tm_sec,buf1);
speakall(L,buf2,strlen(buf2));
break;
}
case '$'://私聊
{
time(&t);
pt=localtime(&t);
for(i=1;((buf1[i]!=' ') && (itm_hour,pt->tm_min,pt->tm_sec,buf1);
sendto_client(&destsocket,buf2,strlen(buf2)+1);
break;
}
case '@' :
{
..........................
}
}
}
}
客户端省略部分代码
void pthread_chat()//此处开辟线程是为了收集来自服务器的信息,并发送给另个进程显示信息
{
int len;
int chat_fd;
char buf[MAX_TEXT];
char flag;
running=1;
int i;
char socket[6];
memset(socket,0,6);
char filename[50];
if((chat_fd=open(chatdata_path,O_APPEND |O_WRONLY,0666))
int speakall(LinkList L,char buf[],int size)//群聊函数。链表节点为存储用户的信息结构体
{
LinkList p;
int socket;
if(!L)
return -1;
p=L->next;
while(p!=NULL)
{
if(p->user.state==1)
{
socket=p->user.mysockfd;
sendto_client(&socket,buf,size);
}
p=p->next;
}
}
int chat_server(int *socket,char name[])
{
int i;
int len;
int running=1,recvsize;
char filepath[60];
int filesocket;
struct tm *pt;
time_t t;
char option;
char buf1[MAX_RECVSIZE];
char buf2[MAX_TEXTSIZE];
char id[10];
int destsocket;
memset(buf2,0,MAX_TEXTSIZE);
sprintf(buf2,"%s 上线 !n",name);
speakall(L,buf2,strlen(buf2));
while(1)
{
memset(id,0,10);
memset(buf1,0,MAX_RECVSIZE);
memset(buf2,0,MAX_TEXTSIZE);
memset(filepath,0,60);
if((recvsize=recv(*socket,buf1,MAX_RECVSIZE,0))tm_hour,pt->tm_min,pt->tm_sec,buf1);
speakall(L,buf2,strlen(buf2));
break;
}
case '$'://私聊
{
time(&t);
pt=localtime(&t);
for(i=1;((buf1[i]!=' ') && (itm_hour,pt->tm_min,pt->tm_sec,buf1);
sendto_client(&destsocket,buf2,strlen(buf2)+1);
break;
}
case '@' :
{
..........................
}
}
}
}
客户端省略部分代码
void pthread_chat()//此处开辟线程是为了收集来自服务器的信息,并发送给另个进程显示信息
{
int len;
int chat_fd;
char buf[MAX_TEXT];
char flag;
running=1;
int i;
char socket[6];
memset(socket,0,6);
char filename[50];
if((chat_fd=open(chatdata_path,O_APPEND |O_WRONLY,0666))