服务端:

 #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 ;
}
客户端向已经关闭连接(不是半关闭)的服务端发送报文会被响应一个RST

tcp异常终止连接的更多相关文章

  1. TCP异常终止(reset报文)

    在之前做智能家居系统时,师弟做的服务端与WiFI盒子(客户端)进行通信时,总是出现异常情况,然后服务端不停地向客户端发送RESET报文,之前一直都不知道是什么情况,因此一直不知道是什么问题导致的,今天 ...

  2. TCP的连接控制

    TCP的三次握手 所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包. 确认号ack:期待收到对方下一个报文段的第一个数据字节的序号. ...

  3. 通过端口 8080 连接到主机 localhost 的 TCP/IP 连接失败

    错误:“connect timed out.请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接.”这 ...

  4. TCP/IP连接状态

    1.建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1.(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN ...

  5. 通俗易懂地讲解TCP建立连接的三次握手和释放连接的四次挥手

    TCP建立连接时,为什么要进行三次挥手? 每一次TCP连接都需要三个阶段:连接建立.数据传送和连接释放.三次握手就发生在连接建立阶段. 在谢希仁著<计算机网络>第四版中讲三次握手的目的是为 ...

  6. Http 和TCP的关系,TCP长连接和短连接有什么区别?

    HTTP 协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用.由于HTTP在 ...

  7. TCP 长连接与短连接的区别

    TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的 ...

  8. TCP短连接TIME_WAIT问题解决方法大全

    tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接 ...

  9. com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Connection refused: connect

      问题描述:最简单的数据库连接报错,到主机  的 TCP/IP 连接失败.(win 7 操作系统) 错误信息: com.microsoft.sqlserver.jdbc.SQLServerExcep ...

随机推荐

  1. FineUI Grid 缓存列显示隐藏状态

    当列表字段过多时,需要隐藏掉一些,但是再次打开页面又显示出来了,FineUI没有提供缓存功能,那么自己动手,打开[ext-part2.js]找到 “if (Ext.grid.column.RowNum ...

  2. github开源项目

    开源一小步,前端一大步   作为一名前端攻城狮,相信不少人已经养成了这样的习惯.当你进入一个网站,总会忍不住要打开控制台看下它是如何布局的,动画是如何实现的等.这也是前端开发者一个不错的的学习途径. ...

  3. window.open()详解及浏览器兼容性问题

    一.基本语法:window.open(pageURL,name,parameters)其中:pageURL 为子窗口路径name  为子窗口名字parameters 为窗口参数(各参数用逗号分隔) 二 ...

  4. 测试HashTable、Collections.synchronizedMap和ConcurrentHashMap的性能

        对于map的并发操作有HashTable.Collections.synchronizedMap和ConcurrentHashMap三种,到底性能如何呢? 测试代码: package com. ...

  5. MACOSX 命令行设置无效网关ip

    sudo需要管理员权限 sudo networksetup -setmanual Ethernet 192.168.10.100 255.255.255.0 0.0.0.0 网络设置界面会报错: Ba ...

  6. Spring.Net-DI依赖注入和Ioc控制反转

    Spring.Core作为整个Spring框架的基础,实现了依赖注入的功能.Spring框架的其它模块都要依赖或扩展该模块. IObjectFactory接口,该接口实现了工厂模式,使用它可以帮我们创 ...

  7. php memcached+Mysql(主从)

    /* index.php   程序入口,用来构造sql(如查询,更新) config.php  配置参数(memcache,mysql) init.php    封装memcached操作(memca ...

  8. 使用php完成常见的"文件上传"功能

    文件上传现在都是很常见的了,可以上传文件,上传头像等,不同的浏览器"文件上传"有不同的效果 先看下火狐浏览器的效果是这样的: 再看下IE浏览器是这样的: 还有很多其他的浏览器,就不 ...

  9. jQuery插件slides实现无缝轮播图特效

    初始化插件: slides是一款基于jQuery无缝轮播图插件,支持图内元素动画,可以自定义动画类型 1 2 3 4 5 6 7 8 9 10 $(".slideInner").s ...

  10. springmvc-interceptor(拦截器)

    在大配置中配置拦截器代码如下: <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" ...