tcp异常终止连接
服务端:
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdint.h>
#include <assert.h>
#include <fcntl.h>
#include <string.h>
#include <bits/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h> const char* ip = "192.168.16.105";
uint16_t port = ;
char buff[]; void make_sock_noblocking(int sock_fd)
{
int flags = fcntl(sock_fd, F_GETFL, );
flags |= O_NONBLOCK;
fcntl(sock_fd, F_SETFL, flags);
} int main()
{
int listen_fd = socket(PF_INET, SOCK_STREAM, ); struct sockaddr_in sock_addr;
memset(&sock_addr, , sizeof(sock_addr));
sock_addr.sin_family = AF_INET;
sock_addr.sin_port = htons(port);
inet_pton(AF_INET, ip, &(sock_addr.sin_addr)); int optval = ;
setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR,
(const void *)&optval , sizeof(int)); int ret = bind(listen_fd, (sockaddr*)&sock_addr, sizeof(sock_addr)); listen(listen_fd, ); //make_sock_noblocking(listen_fd); struct sockaddr_in client_addr;
memset(&sock_addr, , sizeof(client_addr));
socklen_t len = sizeof(client_addr);
int conn_fd = accept(listen_fd, (sockaddr*)&client_addr, &(len)); printf("%d--------%s\n", conn_fd, strerror(errno)); int read_bytes = read(conn_fd, buff, sizeof(buff)); printf("%d %s\n", read_bytes, strerror(errno)); close(listen_fd);
close(conn_fd); // RST // shutdown(conn_fd, SHUT_RDWR); // RST // shutdown(conn_fd, SHUT_WR); // 不会产生RST sleep();
//exit(0);
}
客户端:
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdint.h>
#include <assert.h>
#include <fcntl.h>
#include <string.h>
#include <bits/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <errno.h>
#include <signal.h> const char* ip = "192.168.16.105";
uint16_t port = ;
const char* msg = "bitch!"; int main()
{
struct sigaction sa;
memset(&sa, '\0', sizeof(sa));
sa.sa_handler = SIG_IGN;
sa.sa_flags = ;
if (sigaction(SIGPIPE, &sa, NULL)) {
return ;
} int sock_fd = socket(PF_INET, SOCK_STREAM, ); struct sockaddr_in sock_addr;
memset(&sock_addr, , sizeof(sock_addr));
sock_addr.sin_family = AF_INET;
sock_addr.sin_port = htons(port);
inet_pton(AF_INET, ip, &(sock_addr.sin_addr)); int ret = connect(sock_fd, (sockaddr*)&sock_addr, sizeof(sock_addr)); if(ret < )
{
printf("%s\n", strerror(errno));
}
//
// struct linger my_linger;
// memset(&my_linger, 0, sizeof(my_linger));
// my_linger.l_onoff = 1;
// my_linger.l_linger = 0;
//
// setsockopt(sock_fd, SOL_SOCKET, SO_LINGER, &my_linger, sizeof(my_linger)); int write_bytes = write(sock_fd, msg, strlen(msg)); if (write_bytes > )
{
printf("%d----%s\n", write_bytes, strerror(errno));
} sleep(); write_bytes = write(sock_fd, msg, strlen(msg)); if (write_bytes > )
{
printf("%d----%s\n", write_bytes, strerror(errno));
}
sleep(); write_bytes = write(sock_fd, msg, strlen(msg)); printf("%d----%s\n", write_bytes, strerror(errno)); close(sock_fd); return ;
}
tcp异常终止连接的更多相关文章
- TCP异常终止(reset报文)
在之前做智能家居系统时,师弟做的服务端与WiFI盒子(客户端)进行通信时,总是出现异常情况,然后服务端不停地向客户端发送RESET报文,之前一直都不知道是什么情况,因此一直不知道是什么问题导致的,今天 ...
- TCP的连接控制
TCP的三次握手 所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包. 确认号ack:期待收到对方下一个报文段的第一个数据字节的序号. ...
- 通过端口 8080 连接到主机 localhost 的 TCP/IP 连接失败
错误:“connect timed out.请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接.”这 ...
- TCP/IP连接状态
1.建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1.(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN ...
- 通俗易懂地讲解TCP建立连接的三次握手和释放连接的四次挥手
TCP建立连接时,为什么要进行三次挥手? 每一次TCP连接都需要三个阶段:连接建立.数据传送和连接释放.三次握手就发生在连接建立阶段. 在谢希仁著<计算机网络>第四版中讲三次握手的目的是为 ...
- Http 和TCP的关系,TCP长连接和短连接有什么区别?
HTTP 协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用.由于HTTP在 ...
- TCP 长连接与短连接的区别
TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的 ...
- TCP短连接TIME_WAIT问题解决方法大全
tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接 ...
- com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Connection refused: connect
问题描述:最简单的数据库连接报错,到主机 的 TCP/IP 连接失败.(win 7 操作系统) 错误信息: com.microsoft.sqlserver.jdbc.SQLServerExcep ...
随机推荐
- C++ 顺序容器 vector list deque 之比较
在C++标准库中定义了三种顺序容器类型:vector,list和deque.所谓顺序容器就是根据位置来存储和访问元素,元素的排列次序与元素的值无关,而是由元素添加到容器的次序决定的. vector的底 ...
- 红黑树LLRB
LLRB——红黑树的现代实现 一.本文内容 以一种简明易懂的方式介绍红黑树背后的逻辑实现2-3-4树,以及红黑树的插入.删除操作,重点在2-3-4树与红黑树的对应关系上,并理清红黑树相关操作的来龙去脉 ...
- .NET中操作IPicture、IPictureDisp
.NET中操作IPicture.IPictureDisp的小随笔 [题外话] 最近在做一个调用某实验仪器的程序,这个仪器提供了Windows上COM的接口.调用仪器的时候需要传输图片,提供的接口里 ...
- iOS关于应用内分享
iOS7.0增加了AirDrop功能,可知在未来,手机信息资源的直接分享会越来越重要.而我们在iPhone系统短信点击照片会看到右上角的分享按钮,点击可以弹出一系列的应用菜单,允许用户把这张图片分享到 ...
- PHP的curl实现get,post 和 cookie(几个实例)
类似于dreamhost这类主机服务商,是显示fopen的使用 的.使用php的curl可以实现支持FTP.FTPS.HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE ...
- 尽量不用char*作为hash_map的key
引子: 同事前几天用hash_map时发现一些问题.当时的场景是有一些字符串char*,要去对应某种类型的对象.同事的做法是: 尝试用char*作为key进行hash.编译通过,但运行时不正常,ins ...
- iOS单元测试
参考下面的链接 ,写的还不错 http://gaohaijun.blog.163.com/blog/static/176698271201151052325749/
- JDBC之事务隔离级别以及ACID特性
JDBC之事务隔离级别以及ACID特性 事务隔离级别: 1.更新遗失(Lost update) 两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了.这是因为系统没有 ...
- 字符串匹配算法 -- Rabin-Karp 算法
字符串匹配算法 -- Rabin-Karp 算法 参考资料 1 算法导论 2 lalor 3 记忆碎片 Rabin-karp 算法简介 在实际应用中,Rabin-Karp 算法对字符串匹配问题能较好的 ...
- [wp8游戏] cocos2d-x v2.2 + VS2013 环境搭建
[wp8游戏] cocos2d-x v2.2 + VS2013 环境搭建 by:唐小崇 http://www.cnblogs.com/tangchong 从cocos2d-x v2.1.4 以来,co ...