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

📄 receiver.c

📁 这是一个在局域网下的即时聊天工具, 由于本人是编程初学者, 非常希望从贵站点中得到宝贵的源码资料供我学习和参考, 请站长允许我加入,谢谢!
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <string.h>#include <netinet/in.h>#include <fcntl.h>#include <arpa/inet.h>#include <netdb.h>#include <errno.h>#define MY_PORT 9999main(int argc, char **argv){int sock_fd;char message[256];int sin_len;struct sockaddr_in sin;ssize_t recv_rc;long save_file_flags;printf("Your instant message program is running..\n");bzero(&sin, sizeof(struct sockaddr_in));sin.sin_family = AF_INET;sin.sin_port = htons(MY_PORT);sin.sin_addr.s_addr = htonl(INADDR_ANY);sin_len = sizeof(struct sockaddr_in);if ((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("Socket error!\n"); exit(255); }if (bind(sock_fd, (struct sockaddr *)&sin, sizeof(struct sockaddr_in)) < 0) { printf("Bind error!\n"); exit(255); }save_file_flags = fcntl(sock_fd, F_GETFL);//printf("File flags are %ld\n", save_file_flags);save_file_flags |= O_NONBLOCK;if (fcntl(sock_fd, F_SETFL, save_file_flags) == -1) { printf("trying to set socket to non-blocking error!\n"); exit(255); }//printf("File flags are now %ld\n", save_file_flags);while(1) { sleep(1); recv_rc = recvfrom(sock_fd, message, sizeof(message), 0, (struct sockaddr *)&sin, &sin_len); if (recv_rc == -1 && errno != EAGAIN)  {  printf("Received from sender %s error!\n", inet_ntoa(sin.sin_addr));  exit(255);  } if (recv_rc == 0 | errno == EAGAIN)  {  //printf("No data yet\n");  errno = 0;  continue;  } errno = 0; printf("Get a message from sender %s:\n%s\n", inet_ntoa(sin.sin_addr), message); }if (close(sock_fd) == -1) { printf("Close file failed.\n"); exit(255); }exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -