network.c
来自「在linux系统下实现了一个多人聊天工具的服务器端和客户端。该工具支持显示在线用」· C语言 代码 · 共 112 行
C
112 行
#include "global.h"
void receive_context(int connfd,char *buff,int l,int flag,char w)
{
int i = 0;
int j = 0;
int n = 0;
int nn = 0;
int res;
int len;
char c;
char temp[MAX_MES];
char num[MAX_NUM];
char * mes;
if(flag) {
num[0] = w;
i = 1;
}
while((n=read(connfd,&c,1))>0) {
num[i] = c;
if(c == '\n') {
num[i] = '\0';
len = get_int(num)+1;
j = l;
while((nn=read(connfd,temp,len))>0) {
strncat(buff,temp,nn);
j += nn;
buff[j] = '\0';
len -= nn;
if(len == 0)
break;
}
j--;
buff[j] = '\0';
sem_wait(&empty);
sem_wait(&mutex);
snprintf(mess_buffer[mess_in],MAX_BUFF,"%s",buff);
mess_in = (mess_in+1)%MAX_SHOW_BUFF;
sem_post(&mutex);
sem_post(&full);
break;
} else
i++;
}
if(n < 0) {
fprintf(stderr,"read error\n");
finish();
exit(1);
}
}
/*receive messages*/
void receive_mes(int connfd)
{
int i = 0;
int n = 0;
int count = 0;
char c;
char buff[MAX_MES];
buff[0] = '\0';
while((n=read(connfd,&c,1))>0) {
if(c == '<') {
buff[i] = c;
i++;
while((n=read(connfd,&c,1))>0) {
buff[i] = c;
i++;
if(c == '>') {
buff[i++] = ' ';
buff[i] = '\0';
receive_context(connfd,buff,strlen(buff),0,0);
i = 0;
break;
}
}
} else {
buff[0] = '\0';
receive_context(connfd,buff,0,1,c);
i = 0;
}
}
if(n < 0) {
fprintf(stderr,"read error\n");
finish();
exit(1);
}
finish();
exit(1);
}
/*send message*/
void send_mes(char * buff,int connfd)
{
int n;
int i;
char temp[MAX_MES+10];
n = strlen(buff);
sprintf(temp,"%d\n%s\n",n,buff);
n = strlen(temp);
i = write(connfd,temp,n);
if(i < n) {
fprintf(stderr,"write error!\n");
exit(1);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?