• 大小: 33KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-15
  • 语言: 其他
  • 标签: linux  网络编程  

资源简介

linux运行的聊天室程序,多客户端登录后,将任意客户端数据发送给其他登录的客户端

资源截图

代码片段和文件信息

#include “chat_room_client.h“

int main()
{
int sfd;

struct sockaddr_in addr_server;
bzero(&addr_server sizeof(addr_server));
addr_server.sin_family = AF_INET;
addr_server.sin_port = htons(MY_PORT);
addr_server.sin_addr.s_addr = htonl(INADDR_ANY);

sfd = socket(AF_INET SOCK_STREAM 0);
if (sfd < 0)
return -1;
if (connect(sfd (struct sockaddr*)&addr_server sizeof(addr_server)) < 0) {
close(sfd);
return -1;
}
printf(“connect is success\n“);

/*注册文件描述符,0用于输出,1用于读socket上的内容*/
pollfd fds[2];
fds[0].fd = 0;
fds[0].events = POLLIN | POLLOUT;
fds[0].revents = 0;


fds[1].fd = sfd;
fds[1].events = POLLIN | POLLRDHUP; //服务器关闭连接时,设置为POLLRDHUP
fds[1].revents = 0;

char read_buf[BUFFER_SIZE]; //64
/*准备两个管道*/
int pipefd[2];
int ret = pipe(pipefd);
if (ret < 0)
return -1;
while (1)
{
ret = poll(fds 2 -1);
if (ret < 0) {
printf(“poll() error\n“);
return -1;
}
/*服务器关闭*/
if (fds[1].revents & POLLRDHUP) {
printf(“server close the connect!\n“);
break;
}
/*socket缓冲区有数据可读*/
if (fds[1].revents & POLLIN) {
memset(read_buf ‘\0‘ BUFFER_SIZE);
recv(fds[1].fd read_buf BUFFER_SIZE - 1 0);
printf(“%s\n“ read_buf);
}
/*客户端用户输入数据使用splice函数,实现零拷贝*/
/*ssize_t splice(int fd_inloff_t* off_tint fd_outloff_t* off_outsize_t lenunsigned int flags);
fd_in:待输入数据的文件描述符.

off_t:如果fd_in是一个管道文件描述符那么off_t参数必须是NULL表示从数据流的当前偏移位置读入;如果fd_in不是一个管道文件描述符(例如socket),则它将指出具体的偏移位置.

 len:指定移动数据的长度.

flags:则控制数据如何移动,它可以被设置为下表中值的按位异或.*/
if (fds[0].revents & POLLIN) {
ret = splice(0 NULL pipefd[1] NULL 32768 SPLICE_F_MORE | SPLICE_F_MOVE); //0是标准输入的文件描述符
ret = splice(pipefd[0] NULL sfd NULL 32768 SPLICE_F_MORE | SPLICE_F_MOVE);
//为什么不直接将0->sfd? 因为使用splice函数时,fd_in和fd_out必须至少有一个管道文件描述符
}
}
close(sfd);
return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-06-03 09:50  char_room\
     文件        9153  2019-06-03 09:50  char_room\chat_client
     文件        2115  2019-06-03 09:50  char_room\chat_room_client.cpp
     文件         324  2019-06-03 09:50  char_room\chat_room_client.h
     文件        2952  2019-06-03 09:50  char_room\chat_room_client.o
     文件        5965  2019-06-03 09:50  char_room\chat_room_server.cpp
     文件         582  2019-06-03 09:50  char_room\chat_room_server.h
     文件        6960  2019-06-03 09:50  char_room\chat_room_server.o
     文件       13819  2019-06-03 09:50  char_room\chat_server
     文件      258048  2019-06-03 09:50  char_room\core
     文件         364  2019-06-03 09:50  char_room\makefile

评论

共有 条评论