面试总结---TCP实现的chat_room程序
2014-11-12 22:41
162 查看
今天面试的时候遇到一个面试官问我关于socket套接字实现聊天室的功能的软件,上一篇博客写的是UDP的聊天室软件程序,现在这个是TCP聊天室的软件代码。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> /************************************************************************ 函数名称: int main(int argc, char *argv[]) 函数功能: 主函数,建立一个TCP 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_STREAM,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); int err_log = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(my_addr)); if(err_log != 0) { perror("bind"); close(sockfd); exit(-1); } err_log = listen(sockfd, 10); if(err_log != 0) { printf("listen"); close(sockfd); exit(-1); } struct sockaddr_in client_addr; char cli_ip[INET_ADDRSTRLEN] = ""; socklen_t cliaddr_len = sizeof(client_addr); int connfd = accept(sockfd, (struct sockaddr*)&client_addr, &cliaddr_len); if(connfd < 0) { perror("accept"); close(sockfd); exit(-1); } inet_ntop(AF_INET, &client_addr.sin_addr, cli_ip, INET_ADDRSTRLEN); while(1) { char recv_buf[1024] =""; char send_buf[1024] =""; if(recv(connfd, recv_buf, sizeof(recv_buf), 0) == 0) { printf("client closed!\n"); close(sockfd); close(connfd); exit(-1); } printf("%s : %s\n", cli_ip, recv_buf); fgets(send_buf, sizeof(send_buf), stdin); send_buf[strlen(send_buf)-1] = '\0'; send(connfd, send_buf, strlen(send_buf), 0); } close(sockfd); close(connfd); return 0; }
下面的这个是client部分的代码:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> /************************************************************************ 函数名称: int main(int argc, char *argv[]) 函数功能: 主函数,建立一个TCP Echo Client 函数参数: 可以传参改变服务器的ip地址和其端口号,亦可不传参使用默认值 函数返回: 无 ************************************************************************/ int main(int argc, char *argv[]) { unsigned short port = 8000; char *server_ip = "172.20.223.55"; if(argc > 1) { server_ip = argv[1]; } if(argc > 2) { port = atoi(argv[2]); } int sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd < 0) { perror("socket"); exit(-1); } struct sockaddr_in server_addr; bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); inet_pton(AF_INET, server_ip, &server_addr.sin_addr); int err_log = connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); if(err_log != 0) { perror("connect"); close(sockfd); exit(-1); } printf("connect to %s success\nplease input your message\n", server_ip); while(1) { char send_buf[512] = ""; char recv_buf[512] = ""; fgets(send_buf, sizeof(send_buf), stdin); send_buf[strlen(send_buf)-1] = '\0'; if(strcmp(send_buf, "exit") == 0) { close(sockfd); exit(0); } send(sockfd, send_buf, strlen(send_buf), 0); recv(sockfd, recv_buf, sizeof(recv_buf), 0); printf("recv message:%s\n", recv_buf); } }
下面的部分是Makefile的代码:
all:server client TARGET = server client CFLAGS = -Wall CC = gcc server:server.c gcc server.c -o server $(CFLAGS) client:client.c gcc client.c -o client $(CFLAGS) clean: rm -rf *.o $(TARGET)
相关文章推荐
- 【tcp-ip学习总结】使用tcp协议实现简单的通信小程序
- 【tcp-ip学习总结】基础UDP实现的简单通信功能小程序
- WinForm中单个窗体实现P2P聊天程序(Socket,TcpListener,TcpClient,Thread,)
- C#实现让程序只能打开一个实例(总结3方法)
- UNP总结 Chapter 5 TCP客户/服务器程序实例
- 基于Android平台多个Icon的APk——实现多程序入口总结(转)
- Python应用-[用Python实现一个socket echo程序 && tcp socket的几个关闭状态]
- .Net Remoting 事件回调 Client 函数方法完整实例: C# 实现控制台网络聊天室 (Console Remoting ChatRoom)
- 利用TCP和UDP协议,实现基于Socket的小聊天程序
- JAVA实现的一个冒泡程序(面试常考)
- 用python实现一个socket echo程序 && tcp socket的几个关闭状态
- 多连接的tcp/ip程序实现
- 网络编程资料总结(二)----Tcp多线程服务器和客户端的实现
- [技巧] C#实现让程序只能打开一个实例(总结3方法)
- 利用TCP传输协议实现基于Socket的聊天程序
- C#实现让程序只能打开一个实例(总结3方法)(转)
- 多个Icon的APk——实现多程序入口总结
- 单片机实现TCP_IP协议的完整C源程序,带程序注解
- 利用windows sockets实现TCP通讯示例程序
- 用python实现一个socket echo程序 && tcp socket的几个关闭状态