socket编程(二)TCP cpp
来源:互联网 发布:南风知我意在线阅读 编辑:程序博客网 时间:2024/05/01 08:57
TCP cpp socket
这里的cpp实现可以对比这里的Python实现一起食用,效果更佳
下面代码参考 http://www.tuicool.com/articles/MfaI7bY (其实基本是抄袭~~~)
TCPServer.cpp
//// Created by hui on 16-11-22.///** * This file is a test for tcp server using socket * visit http://www.tuicool.com/articles/MfaI7bY * * step is: * socket : declear a socket * bind : bind Server IP and Port * listen : set max listen number * accept : using dead loop to wait client connect in. * recv/send : always run in an independent thread to send or recv data with client. * close: after done something close all socket. */#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#define SERVER_PORT 10000int main(){ int serverSocket; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int addr_len = sizeof(client_addr); int connectionSocket; char buffer[200]; int iDataNum; /** create a socket for server * doamain : AF_INET means ipv4 * type : SOCK_STREAM , usually use with TCP * protocol: IPPROTO_IP is Dummy protocol for TCP,会自动选择type类型对应的默认协议 * */ if((serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) < 0){ perror("socket"); return 1; } /** bind server socket with (IP, PORT) */ bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; // using ipv4 server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(serverSocket, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0){ perror("connect"); return 1; } /** set the max listen number to 5 */ if(listen(serverSocket, 5) < 0){ perror("listen"); return 1; } /** open a dead loop to wait client to connect in */ while(1){ printf("Listening on port: %d\n", SERVER_PORT); connectionSocket = accept(serverSocket, (struct sockaddr*)&client_addr, (socklen_t*)&addr_len); if(connectionSocket < 0){ perror("accept"); continue; } /** if connection had been set up, then recv or send data with client */ printf("\nrecv data from %s:%d\n", inet_ntoa(client_addr.sin_addr), htons(client_addr.sin_port)); while(1){ iDataNum = (int)recv(connectionSocket, buffer, 1024, 0); if(iDataNum < 0){ perror("receive"); continue; } buffer[iDataNum] = '\0'; if(strcmp(buffer, "over") == 0 || strcmp(buffer, "quit") == 0) { close(connectionSocket); break; } printf("recv %d bytes data is:\n%s\n", iDataNum, buffer); send(connectionSocket, buffer, (size_t)iDataNum, 0); } if(strcmp(buffer, "quit") == 0) { close(serverSocket); break; } } return 0;}
TCPClient.cpp
//// Created by hui on 16-11-22.///** * This is a test file for TCP Client using socket * visit http://www.tuicool.com/articles/MfaI7bY * * steps: * socket : create a cleint socket * connect : connect to server socket * recv/send : excahnge data with server in a dead loop * clsoe: close socket*//*socket tcp客户端*/#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#define SERVER_PORT 10000int main(){ int clientSocket; struct sockaddr_in server_addr; char sendbuf[200]; char recvbuf[200]; int iDataNum; if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0){ perror("socket"); return 1; } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if(connect(clientSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0){ perror("connect"); return 1; } printf("connect with destination host...\n"); while(1){ printf("Input your world:>"); scanf("%s", sendbuf); // read a word, space or \n to end input printf("\n"); send(clientSocket, sendbuf, strlen(sendbuf), 0); if(strcmp(sendbuf, "quit") == 0) break; iDataNum = (int)recv(clientSocket, recvbuf, 200, 0); recvbuf[iDataNum] = '\0'; printf("recv data of my world is: %s\n", recvbuf); } close(clientSocket); return 0;}
0 0
- socket编程(二)TCP cpp
- Linux TCP Socket编程(二)
- Java网络(Socket)编程小记二 TCP编程
- Socket 编程(TCP)
- Socket 编程(TCP)
- socket编程(TCP)
- TCP UDP及socket编程学习(二)
- 网络协议(二)Socket编程之TCP
- linux socket网络编程二 基于tcp
- Socket编程(二)---TCP简单实例
- Linux下TCP/IP socket 编程二
- socket编程流程(tcp)
- socket编程(TCP&UDP)
- socket编程(TCP、UDP)
- linux socket(tcp)编程
- socket编程(TCP、UDP)
- Socket编程(TCP、UDP)
- TCP编程(二)
- ★leetcode43_Multiply Strings
- 控件树的触摸事件派发小结
- smali 语法总结
- update maven之后jre被改成1.5的问题
- 第十三周 项目4 --Floyd算法的验证
- socket编程(二)TCP cpp
- 硬件指令集急速ARMV7
- 原码、反码、补码
- (3/4 OK) 在VirtualBox中运行 cm-13-kiwi (华为 荣耀 5X) - 移植cm-13-kiwi
- 二维码的生成算法
- Android热修复“AndFix”中文解析(使用说明)
- nefuoj 14 蟠桃记
- linux i2c驱动注册流程
- leetcode--n_queens&&n_queens_II