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 ...
随机推荐
- canvas 之刮刮卡
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在VMware的Linux系统上安装Redis
在VMware的Linux系统上安装Redis 具体过程如下: 下载,解压和编译: 在执行make的时候报错,具体报错信息如下: zmalloc.o: In function `zmalloc_use ...
- 《12个有趣的C语言问答》(4)
C语言面试问答——<12个有趣的C语言问答>评析(4) 前文链接:http://www.cnblogs.com/pmer/p/3324063.html 8,Making changes i ...
- cocos2d(CCSprite 用贝塞尔做抛物线,足球精灵并且同时做旋转放大效果)
今天刚学到Cocos2d中的动作哪一张,自己做了一个用贝塞尔曲线足球精灵实现同时放大旋转和抛物线动作. 使用 [CCSpawn actions:,,]链接这几个动作,同时做.与CCSequence(一 ...
- jQuery实现table隔行换色和鼠标经过变色
一.隔行换色 $("tr:odd").css("background-color","#eeeeee"); $("tr:even& ...
- Android过滤Logcat输出
logcat和grep配合使用 1.打印特定tag的log,如打印Tag为Adm的Log adb logcat | grep Adm adb logcat | grep - ...
- match in shell scripts
for iter_ in $(seq 1 $END); do strLabel=`expr $i \* 200` echo $strLabel done
- 扩展jquery easyui datagrid编辑单元格
扩展jquery easyui datagrid编辑单元格 1.随便聊聊 这段时间由于工作上的业务需求,对jquery easyui比较感兴趣,根据比较浅薄的js知识,对jquery easyui中的 ...
- 半同步半异步模式的实现 - MSMQ实现
半同步半异步模式的实现 - MSMQ实现 所谓半同步半异步是指,在某个方法调用中,有些代码行是同步执行方式,有些代码行是异步执行方式,下面我们来举个例子,还是以经典的PlaceOrder来说,哈哈. ...
- 用docker cluster store实现kuryr的共享subnet
kuryr共享网络 在上一篇分享中,提到共享网络需要在10.8.65.80和10.8.65.81上分别通过docker network create来创建网络.而实际上,通过对docker源码的解读, ...