用socket实现一个多人聊天室的思路很简单,即在服务器端定义一个fd的int型数组,用来存储已经连接的客户端的socket连接套接字fd(因为发送和接收数据都只需要借助连接套接字fd),当服务器接收到来自某一客户端的数据时,直接转发给其他所有连接着的客户端,即完成了多人聊天室。
服务器端:多线程进行数据的转发
客户端:创建一个线程专门用来接收数据,主线程进行输入数据等操作
下面直接贴代码:
server.c
#include <stdio.h>
#include <strings.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<pthread.h>
#include<stdlib.h>
#define PORT 1234
#define BACKLOG 1
#define Max 5
#define MAXSIZE 1024
/*定义全局变量*/
int fdt[Max]={
0};
char mes[1024];
/**/
void *pthread_service(void* sfd)
{
int fd=*(int *)sfd;
while(1)
{
int numbytes;
int i;
numbytes=recv(fd,mes,MAXSIZE,0);
if(numbytes<=0){
for(i=0;i<Max;i++){
if(fd==fdt[i]){
fdt[i]=0;
}
}
printf("numbytes=%d\n",numbytes);
printf("exit! fd=%d\n",fd);
break;
}
printf("receive messag