简单的TCP通信
2015-07-05 12:12
477 查看
//客户端: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <netinet/in.h> #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> #include <string.h> #define MAXLINE 1024 int main(int argc, char** argv) { int sockfd, ret; struct sockaddr_in servaddr; char recvline[MAXLINE]; if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "socket error.\n"); return -1; } bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(20015); if((inet_pton(AF_INET, (char*)"192.168.0.130", &servaddr.sin_addr)) <= 0) { fprintf(stderr, "inet_pton error.\n"); return -1; } if(connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) { fprintf(stderr, "connect error.\n"); return -1; } while((ret = read(sockfd, recvline, sizeof(recvline))) > 0) { recvline[ret] = 0; if(fputs(recvline, stdout) == EOF) { fprintf(stderr, "fputs error..\n"); return -1; } } if(ret < 0) fprintf(stderr, "read error..\n"); printf("\n"); exit(0); }
//服务器端 #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <ctime> int main(int argc, char** argv) { int listenfd, connfd, ret; struct sockaddr_in servaddr, cliaddr; time_t now; char cliIp[1024] = {0}; char buff[1024]; bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(20015); servaddr.sin_addr.s_addr = htonl(INADDR_ANY); if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "socket error.\n"); return -1; } ret = bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)); if(ret < 0) { fprintf(stderr, "bind error..%d\n", ret); return -1; } listen(listenfd, 5); for(;;) { socklen_t clilen = sizeof(clilen); connfd = accept(listenfd, (struct sockaddr*)&cliaddr, &clilen); if(connect < 0) { fprintf(stderr, "accept error..\n"); return -1; } now = time(NULL); snprintf(cliIp, sizeof(cliIp), "From %s:%d:\n ", inet_ntoa(cliaddr.sin_addr), cliaddr.sin_port) ; snprintf(buff, sizeof(buff), "%s\n", ctime(&now)); strcat(cliIp, buff); ret = write(connfd, cliIp, sizeof(cliIp)); ret = close(connfd); if(ret < 0) { fprintf(stderr, "close error..\n"); return -1; } } }
结果:
$ ./a.out From 0.176.121.183:10124: Sun Jul 5 11:56:26 2015
MSS:(最大分节大小)
用于向对端TCP通告对端在每个分节中能够发送的最大TCP数据量。
MSS=MTU-IP和TCP首部固定长度。
以太网:IPV4的MSS = 1460 ipv6:1440
相关文章推荐
- 网络时代:我只是一个用户
- 显示网络图片
- iOS开发网络篇—数据缓存
- iOS开发网络篇—NSURLConnection基本使用
- 网络通信的基本原理
- Windows批处理:自动检查网络连通性
- Spice网络事件处理模型
- 【HM】第9课:Cookie与HttpSession详解
- Asp.Net 构架(Http Handler 介绍)
- neutron中网络虚拟化技术的应用
- okhttp教程
- NYOJ 网络覆盖+数学问题+ceil的使用
- C#网络编程(同步传输字符串)
- C#网络编程(异步传输字符串)
- 配置ip yum 单用户 救援 运行级别
- 2015网络热词TOP30,不造的话你就太任性了
- 【网络互联技术】(二) 网络安全的几种解决途径
- 【网络互联技术】(二) 网络安全的几种解决途径
- 【网络互联技术】(一)移动数据加密和网络安全概述
- 【网络互联技术】(一)移动数据加密和网络安全概述