#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <strings.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
void *send_message(void *arg)
{
int fd = *(int *)arg;
char buf[1024] = {0};
while (1)
{
bzero(buf, 1024);
fgets(buf, 1024, stdin);
write(fd, buf, 1024);
}
}
void *recv_msg(void *arg)
{
int com_fd = *(int *)arg;
char buf[1024] = {0};
while (1)
{
bzero(buf, 1024);
read(com_fd, buf, 1024);
printf("from client:%s\n", buf);
}
return NULL;
}
int main(int argc, char const *argv[])
{
int fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serveraddr;
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(50001);
serveraddr.sin_addr.s_addr = htonl(INADR_ANY);
bind(fd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
listen(fd, 4);
struct sockaddr_in clientaddr;
socklen_t len = sizeof(clientaddr);
pthread_t tid[10];
int i = 0;
while (1)
{
int com_fd = accept(fd, (struct sockaddr *)&clientaddr, &len);
printf("new connetion:%s : %hu\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));
pthread_create(&tid[i], NULL, recv_msg, &com_fd);
pthread_create(&tid[i+1], NULL, send_message, &com_fd);
i += 2;
}
close(fd);
return 0;
}
想要实现的是:编程实现服务器能够接受多个客户端的连接请求,并且能够与多个客户端互相收发数据
但是目前的问题是只能多个客户端发送信息给服务端,服务端不能发信息给各个客户端。
有什么办法可以解决这个问题吗