首页 / 更多教程 / 网络编程Socket之RST详解
网络编程Socket之RST详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了网络编程Socket之RST详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2102字,纯文字阅读大概需要4分钟。
内容图文
![网络编程Socket之RST详解](/upload/InfoBanner/zyjiaocheng/738/f9e48493147d4118aac118f3145f1b13.jpg)
网络编程Socket之RST详解
产生RST的三个条件:
- 目的地为某端口的SYN到达,然而该端口上没有正在监听的服务器;
- TCP想取消一个已有的连接;
- TCP接收到一个根本不存在的连接上的分节;
现在模拟上面的三种情况:
client:
![网络编程Socket之RST详解 - 文章图片](/upload/getfiles/0001/2021/5/4/20210504120710075.jpg)
![网络编程Socket之RST详解 - 文章图片](/upload/getfiles/0001/2021/5/4/20210504120710102.jpg)
#include <stdio.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #define SERV_PORT 8000 int main() { struct sockaddr_in serverAdd; bzero(&serverAdd, sizeof(serverAdd)); serverAdd.sin_family = AF_INET; inet_pton(AF_INET, "127.0.0.1", &serverAdd.sin_addr); serverAdd.sin_port = htons(SERV_PORT); int connfd = socket(AF_INET, SOCK_STREAM, 0); int connResult = connect(connfd, (struct sockaddr*) & serverAdd, sizeof(serverAdd)); if (connResult < 0) { printf("连接失败\n"); close(connfd); return; } ssize_t writeLen; char sendMsg[5000] = { 0 }; unsigned long long totalSize = 0; while (1) { writeLen = write(connfd, sendMsg, sizeof(sendMsg)); if (writeLen < 0) { printf("发送失败"); return 0; } else { totalSize += writeLen; printf("发送成功 totalSize = %zd\n", totalSize); } } }View Code
service:
![网络编程Socket之RST详解 - 文章图片](/upload/getfiles/0001/2021/5/4/20210504120710075.jpg)
![网络编程Socket之RST详解 - 文章图片](/upload/getfiles/0001/2021/5/4/20210504120710102.jpg)
#include <stdio.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #define SERV_PORT 8000 int main(int argc, const char * argv[]) { struct sockaddr_in serverAdd; struct sockaddr_in clientAdd; bzero(&serverAdd, sizeof(serverAdd)); serverAdd.sin_family = AF_INET; serverAdd.sin_addr.s_addr = htonl(INADDR_ANY); serverAdd.sin_port = htons(SERV_PORT); socklen_t clientAddrLen; int listenfd = socket(AF_INET, SOCK_STREAM, 0); int yes = 1; setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (void *)&yes, sizeof(yes)); if (listenfd < 0) { printf("创建socket失败\n"); return -1; } int bindResult = bind(listenfd, (struct sockaddr *)&serverAdd, sizeof(serverAdd)); if (bindResult < 0) { printf("绑定端口失败\n"); close(listenfd); return -1; } listen(listenfd, 20); int connfd; unsigned char recvMsg[246988]; unsigned long long totalSize = 0; clientAddrLen = sizeof(clientAdd); connfd = accept(listenfd,(struct sockaddr *)&clientAdd,&clientAddrLen); if (connfd < 0) { printf("连接失败\n"); return -1; } else { // 这里我们用于测试,只接收一个连接 close(listenfd); } close(connfd); return 0; }View Code
内容总结
以上是互联网集市为您收集整理的网络编程Socket之RST详解全部内容,希望文章能够帮你解决网络编程Socket之RST详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。