⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 network.c

📁 在linux系统下实现了一个多人聊天工具的服务器端和客户端。该工具支持显示在线用户
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -