面试总结---chat room的UDP聊天室软件
来源:互联网 发布:linux上新建weblogic域 编辑:程序博客网 时间:2024/06/05 09:52
今天面试的时候,面试官问道socket()套接字实现chat room聊天室。
下面的这个代码是chat_server.c的代码:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <netinet/in.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netdb.h>/************************************************************************函数名称:int main(int argc, char *argv[])函数功能:主函数,建立一个chat_room函数参数:可以传参改变自己的端口号,亦可不传参使用默认值函数返回:无************************************************************************/int main(int argc,char *argv[]){unsigned short port = 8000;if( argc > 1 )//服务器端口{port = atoi(argv[1]);}int sockfd = socket(AF_INET, SOCK_DGRAM, 0);//创建套接字if(sockfd < 0)//创建套接字{perror("socket");exit(-1);}struct sockaddr_in my_addr;//定义本地通用套接字结构体bzero(&my_addr, sizeof(my_addr));my_addr.sin_family = AF_INET;my_addr.sin_port = htons(port);my_addr.sin_addr.s_addr = htonl(INADDR_ANY);//服务器IP地址int err_log = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(my_addr));//服务器绑定特定的端口号if(err_log != 0){perror("bind");close(sockfd);exit(-1);}printf("%30s\n", "Welcome! this is UDP Chat Room");printf("Server Port is %d\n",port);while(1){char recv_buf[1024] = "";//定义接受数组大小struct sockaddr_in client_addr;//定义客户端通用套接字结构体char cli_ip[INET_ADDRSTRLEN] = "";socklen_t cliaddr_len = sizeof(client_addr);recvfrom(sockfd, recv_buf, sizeof(recv_buf), 0, (struct sockaddr*)&client_addr, &cliaddr_len);inet_ntop(AF_INET, &client_addr.sin_addr, cli_ip, INET_ADDRSTRLEN);printf("\033[31m[%14s]:\033[32m%s\n", cli_ip, recv_buf);}close(sockfd);return 0;}
下面的是chat_client.c文件:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <netinet/in.h>#include <sys/socket.h>#include <arpa/inet.h>/************************************************************************函数名称:int main(int argc, char *argv[])函数功能:主函数,建立一个chat_client函数参数:可以传参改变服务器的ip地址和其端口号,亦可不传参使用默认值函数返回:无************************************************************************/int main(int argc, char *argv[]){unsigned short port = 8000;char *dest_ip = "172.20.223.151";if( argc > 1 ) //更改服务器ip地址{dest_ip = argv[1];}if( argc > 2 )//更改服务器端口号{port = atoi(argv[2]);}int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if(sockfd < 0)//创建UDP套接字{perror("socket error");exit(-1);}struct sockaddr_in dest_addr;bzero(&dest_addr, sizeof(dest_addr));dest_addr.sin_family = AF_INET;dest_addr.sin_port = htons(port);inet_pton(AF_INET, dest_ip, &dest_addr.sin_addr);printf("ready send data to UDP server %s:%d!\n", dest_ip, port);while(1){char send_buf[1024] = "";printf("SENDMSG>:");fgets(send_buf, sizeof(send_buf),stdin);send_buf[strlen(send_buf)-1] = '\0';if(strcmp(send_buf, "exit") == 0){close(sockfd);exit(0);}sendto(sockfd, send_buf, strlen(send_buf), 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));}close(sockfd);return 0;}
下面是实现的对应的Makefile文件:
all:chat_room chat_clientTARGET = chat_room chat_clientCFLAGS = -WallCC = gccchat_room:chat_room.c$(CC) chat_room.c -o chat_room $(CFLAGS)chat_client:chat_client.c$(CC) chat_client.c -o chat_client $(CFLAGS)clean:rm -rf $(TARGET)
1 0
- 面试总结---chat room的UDP聊天室软件
- 自制的聊天工具---chat room
- Chat Room
- chat room
- socket.io邀请制带登录聊天室实例【DRRR-chat-room】
- Chat room help file
- Very Chat Room
- A. Chat room
- codeforces Chat room
- 58A - Chat room
- Coderforces Chat room
- chat聊天室的架设(nodejs)
- 使用Node.js Net 模块实现简单的chat room
- CF:58A. Chat room
- CodeForces-58A-Chat room
- CF 58A Chat room
- codeforces 58A Chat room
- 基于UDP的局域网聊天室
- UVA - 11401 Triangle Counting
- ostringstream及相关
- UITableView中的代理方法的含义以及它的基本属性
- R语言时间序列函数整理
- Linux下php+mysql+nginx编译搭建(二)
- 面试总结---chat room的UDP聊天室软件
- 使用API函数发送消息关闭程序:WM_CLOSE=0x0010;
- 机器学习的相关书籍推荐推荐
- 15款经典图表软件推荐 创建最漂亮的图表
- LeetCode OJ 之 Remove Nth Node From End of List ( 删除链表的从尾部数第n个结点 )
- 移动web开发框架研究
- typeof操作符
- Mac终端Vim如何安装使用ctags
- 页面大小、页表项、虚拟地址和物理地址之间的关系