首页
学习
活动
专区
圈层
工具
发布

基于TCP协议的套接字编程

在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。...注意:也有人将socket说成ip+port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序...) 1.服务器套接字函数 方法 用途 s.bind() 绑定(主机,端口号)到套接字 注:(127.0.0.1)表示本地ip s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连接...数据 s.getpeername() 连接到当前套接字的远端的地址 s.getsockname() 当前套接字的地址 s.getsockopt() 返回指定套接字的参数 s.setsockopt() 设置指定套接字的参数...() 得到阻塞套接字操作的超时时间 5.面向文件套接字 方法 用途 s.fileno() 套接字的文件描述符 s.makefile() 创建一个与该套接字相关的文件 4.示例 1.服务端 import

1.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    网络通信中基于套接字输入流和输出流的创建

    ()方法,分别返回具有套接字通信的基础输入流InputStream和输出流OutputStream对象作为参数,完成绑定套接字通信的输入流和输出流对象的创建。   ...(3)用输入和输出流对象调用其对应方法的操作方式实现网络通信;   (4)网络通信结束,需要关闭输入流和输出流对象,尤其要关闭套接字对象。...具体实现方法   (1)基于套接字的字节输入流dis和输出流dos的创建      dis调用readUTF()方法接收数据;        dos调用writeUTF()方法发送数据; Socket...DataOutputStream dosB=new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));   (3)基于套接字并具有缓冲的字符读取器...br和写入器bw或文本输出流pw的创建       如果以字符为单位的读取器和写入器来实现网络通信,必须将套接字的字节流用转换器转换为字符流输入,或将字符流装换为套接字的字节流输出。

    1.1K20

    Go中链路层套接字的实践

    如果校验错误,直接丢弃掉,不会送到上层的协议栈中,链路层只保证数据帧的正确性(丢掉错误的)。具体数据报的完整性由上层控制,比如TCP重传。...拿到网络接口设备的详细信息,eth0是上面的网络设备名字: ifi, err := net.InterfaceByName("eth0") util.CheckError(err) 然后使用原始套接字绑定到该网络设备上...第三个则对应头部中协议类型(ehter type),比如只接收 IP 协议的数据,也可以接收所有的。可在Linux中if_ether文件查看相应的值。...协议尾部的4字节不需要处理,在发送数据的时候由网络设备并添加,接收的时候由设备校验并去除。在以前的有些计算机中,是需要自己添加或移除尾部的,后面可介绍下该校验算法。...总结 基于此就可以抓取数据链路层的流量,然后对流量进行深入分析等。还有一种方式是基于packet_mmap的共享内存抓包方式,性能更好些。

    2.2K20

    Python网络编程中的套接字名和DNS解析

    这一次要讲的是套接字名和DNS,并且还会涉及到网络数据的发送接受和网络错误的发生和处理。下面说套接字名,在创建和部署每个套接字对象时总共需要做5个主要的决定,主机名和IP地址是其中的最后两个。...', 1088)) 可以看到我们指定了4个值,两个用来做对套接字做配置,另外两个提供bind()调用所需要的地址。...第2个参数就是套接字类型,然后我们解释一下套接字类型,尽管TCP和UDP是AFINET协议族特有的,但是套接字接口的设计者决定基于数据报的套接字这一宏观的概念创建一些更通用的名字,这就是SOCKDGRAM...,而提供可靠传输与流量控制的数据流概念我们用SOCK_STREAM。...在IP上使用流的时候自动选择TCP,设置数据报的时候自动选择UDP。 至于第4个和第5个参数就是IP地址和端口号。当然现在如果要是使用IPV6地址族的话,那你可以看看AF_INET6。

    4.5K70

    套接字中SO_REUSEPORT和SO_REUSEADDR的区别

    基于连接在本socket的目的地址和路由表中对应的信息,操作系统将会选择合适的地址来绑定这个socket,并用这个地址来取代之前的通配符IP地址。...但是其中的关键字是完全。SO_REUSEADDR主要改变了系统对待通配符IP地址冲突的方式。...因为优雅地关闭TCP socket是一个比较复杂的过程,过程中包括与远程主机交换数个数据包(包括在丢包的情况下的丢失重传),而这个数据包交换的过程所需要的时间也包括在延迟时间中。...所以通常我们并不推荐在实际编程中这样做。TCP断开连接的过程超出了本文讨论的范围,如果对此有兴趣,可以参考这个页面。...MacOS X MacOS X的核心代码实现是基于较新版本的原生BSD的BSD风格的UNIX,所以MacOS X提供与BSD完全相同的socket选项,并且它们的含义也与BSD系统相同。

    4.5K21

    八股文!!

    OSI分层协议 TCP/IP协议分层 各层协议概述 tcp/ip协议族数据流 各层协议标识 tcp/ip协议中数据转发 ARP地址解析协议 ARP报文头格式 arp协议 arp高速缓存 3 IP逐跳协议...与tcp延迟确认可以有效减少链接中的小分组,提高链接利用率 TCP_NODELAY 对于交互数据流的tcp链接,如ssh以及telnet等,开启nagle会影响用户感受,使用该选项关闭nagle算法...(套接字本质也是文件描述符),这将导致内核tcp模块发送fin报文并删除该链接的tcb 另一端read该套接字时,将会返回EOF文件结束标志,由此得知对端状态变更。...机器崩溃 机器崩溃时,tcp内核模块无法做出反应,对端不会接收到任何通知也不会再接收到任何数据 另一端read该套接字时,将会被挂起或得到EAGAIN错误 另一端write该套接字时将会持续重传,直到...报文之后,及时关闭链接 Tcp协议总结 tcp的可靠性基于对发送数据按字节排序,并将发送数据暂存在发送缓冲区中,直到收到来自对方的对应确认报文后才会删除,如果期望的确认没有如期到达,就进行重发并再次等待

    1.4K11

    【Linux篇章】Socket套接字,竟让TCP网络通信如此丝滑,一同共赴TCP 网络通信的技术新征程!

    本篇文章继上篇UDP网络通信,将在此篇介绍TCP基础编程函数接口然后将形象的画图分析TCP是如何进行网络通信的,然后基于TCP实现简单的server-client的echo功能,英汉译,执行命令回显功能等...具体用法: 失败返回负数,成功就返回对应的对应的监听套接字文件描述符 listensocketfd! 这里可以理解成创建监听队列所在的文件!...具体用法: 套接字绑定自己所在的ip+port;方便用户连接找到,监听队列绑定对应的ip+port信息!...fd,失败就是小于0,从sockfd即监听队列套接字里面进行监听,最后获取的sockaddr_in进行填充!...MSG_PEEK 允许查看套接字接收缓冲区中的数据,但不会将数据从缓冲区中移除,后续再次调用recv函数时仍可接收这些数据。

    29810

    【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api

    : 在 IP 地址头 中设置 TCP UDP 数据报的 服务类型 或者 流量字段; TOS (Type Of Service) : 在网络中区分包的优先级, 单字节, 下面是常用的常量 服务类型; -...处理能力; -- 使用场景 : 数据报套接字, 支持广播消息概念的网络; -- 默认设置 : DatagramSocket 默认启动该选项;  SO_KEEPALIVE : TCP 套接字设置了该选项,...2小时内 没有通过 Socket 传输数据, TCP 会将 keepalive 探头 发送到同为体中; -- 作用 : 检测同位体主机是否崩溃; -- 适用情况 : 仅对 TCP 套接字有效; --...同位体通过期待的ACK响应 : 不通知应用程序, 在另外2小时 没有数据传输之后, TCP 继续发送一个探头; -- 同位体通过 RST 响应 : 通知本地 TCP 同位体主机 崩溃, 关闭socket...重启主机; -- 同位体无响应 : 直接关闭套接字; SO_LINGER : 关闭逗留的超时值, 即 在 TCP Socket 执行 close 之后, 等待的时间; -- 启用 非0 超时值 : close

    1.5K30

    视频工作流中的并行协调机制

    来源:Global Video Tech Meetup: Denver 主讲人:Douglas Bay 内容整理:付一兵 本文讨论了视频工作流中的并行协调机制,即如何利用并行作业来确保我们需要运行的转码...目录 并行工作流 例子:如何在并行工作流中执行转码 并行平台 总结 并行工作流 一些可以利用并行服务的平台可能是转码、点播打包、即时打包、或者只是普通的视频,就像我们的视频管道中注入的普通元数据一样。...下图是视频并行的一般工作流, 有一个服务器有 api,这个服务器很可能会调用另一个引擎,引擎要做的是根据 api 来决定哪个客户端要运行哪个作业。...例子:如何在并行工作流中执行转码 在这个例子中我们有一个客户端,客户端会调用服务器上的 api,编码 h265QT 到 h264TS,服务器上的服务或应用会创建执行该工作的命令,在这个例子中我们使用简单的...在这一点上我们可以通过相同的工作流运行运行一个打包工作或者几个视频块转码工作。

    97920

    应用层如何强制发送RST即相关内核实现

    当TCP套接字正常关闭时,close会立刻返回,内核会尽力去保证把未发送的缓存发送出去——注意,是尽力保证,并没有说一定会发出去。使用linger选项时,可以设置一个延时时间。...利用nc监听指定的TCP端口,然后运行测试程序,抓包如下: ? 可以明显的看到,在关闭TCP套接字时,应用层强制发送了RST中止连接。 任务达成!...接下来就要看看内核对于linger的处理。在tcp_close函数中, ?...如果套接字设置了linger且lingertime值为0,那么就调用disconnect函数,即tcp_disconnect。在这个函数中, ?...其无不关心具体的套接字的实现,之间返回0。所以对于套接字的fd来说,其close永远返回0——至少到目前的linux最新内核是这样的:D

    2.1K30

    七层协议和TCPIP协议、三次握手四次挥手、BIO、NIO(Netty前置)

    一 基础 1.1 概述 1 网络分层中的IOS七层模型、TCP/IP协议族、TCP、IP,这些有什么不同 2 TCP协议通信过程中的三次握手和四次挥手到底是什么流程?...序号和确认号:TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传输流中,每个字节一个序号。 URG:表示本报文段中发送的数据是否包含紧急数据。...Socket(InetAddress address,int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口。...Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口。...InputStream getInputStream():返回此套接字的输入流。 OutputStream getOutputStream():返回此套接字的输出流。

    76330

    一道腾讯面试题目:没有listen,能否建立TCP连接

    内核在ip_local_deliver_finish先将报文复制一份给原始套接字,然后会继续后面的处理,进入tcp的接收函数tcp_v4_rcv。在这个函数中,要进行套接字的查找。 ?...在这个错误处理中,只要数据包skb的校验和没错,内核就会调用tcp_v4_send_reset发送RST中止这个连接。因此,这个单独使用raw socket的方案是行不通的。...可惜,在与那位同学的讨论中,腾讯面试题目的本意不是这个意思,而是对于普通的TCP套接字来说,如果没有listen调用,是否可以创建连接。即使限定了条件,答案依然是肯定的。...只不过限定了条件之后,我们需要确定2个事情: 与前面类似,如何避免内核发送RST。在不能使用iptable的前提下,这意味着在tcp_v4_rcv中,要能够找到对应的套接字。...对应的匹配TCP套接字过程,如下__inet_lookup_skb->__inet_lookup ? 内核是先在已经连接的表中查找,再进行listen表的查找。

    2.2K30

    【建议收藏】通俗易懂图解网络知识-第二篇

    支持流接口:TCP提供一个流接口(Stream Interface),应用进程可以利用它发送连续的数据流。TCP传输连接提供一个“管道”,保证数据流从一端正确地“流”到另一端。...用于区分不同类型的TCP报文,目前用到的标志位有SYN、ACK、FIN、RST、PSH和URG。...关于服务器模式的程序设计流程: 套接字初始化:用户对套接字的需求来确定套接字的选项。 套接字与端口绑定:将套接字与一个地址结构进行绑定。...服务器在侦听连接时会设置这个参数,限制客户端中等待服务器处理的连接请求的队列长度 在客户端发送连接请求之后,可以从套接字文件描述符中读取数据或者向描述符发送数据。...当服务器处理完数据,要结束与客户端的通信过程的时候,需要关闭套接字连接。

    2K10

    OpenCV中的光流及视频特征点追踪

    这篇博客将介绍光流的概念以及如何使用 Lucas-Kanade 方法估计光流,并演示如何使用 cv2.calcOpticalFlowPyrLK() 来跟踪视频中的特征点。 1....不是很严谨的——稀疏光流特征点追踪效果图如下: 它追踪了视频中多个车的主驾驶、副驾驶,以及行人的边缘角点的轨迹: 此代码不检查下一个关键点的正确程度。...光流追踪的原理: cv2.goodFeaturesToTrack() :Shi-Tomasi 角点检测器确定要追踪的特征点 cv2.calcOpticalFlowPyrLK(): 追踪视频中的稀疏特征点...cv2.calcOpticalFlowFarneback(): 追踪视频中的密集特征点 取第一帧,检测其中的一些 Shi-Tomasi 角点,使用 Lucas-Kanade 光流迭代跟踪这些点。...Shi-Tomasi 角点检测器 比 Harris 角点检测器效果更好一些; 2.2 光流的应用 光流在以下领域有许多应用: 运动的结构 视频压缩 视频稳定 2.3 光流的2种方法 OpenCV提供了俩种算法计算光流

    1.4K00

    网络踩点一一基于Python的端口扫描

    我们都知道,TCP是面向连接的协议,建立TCP连接的时候必然会发生三次握手,C、Python等语言提供了套接字的应用编程接口,我们可以创建、绑定、监听、连接或在套接字上发送数据,因此可以利用其来编写端口扫描器...TCP ACK扫描一一请求服务的一方发送一个只有ACK标志的TCP数据包后,无论端口开启与否,服务端只返回RST包,这种扫描方式可用来检测端口是否被过滤。 ? 端口开启: ? 端口关闭: ? ?...TCP FIN扫描一一请求服务的一方发送一个FIN=1的数据包,如果服务端对应的端口关闭则回复一个RST数据包,如果开启则不回复,这种扫描方式大多用于判断操作类型。 ? ? ?...以Python为例: Scan函数引入IP和端口通过套接字进行连接并打印相关信息,在函数中通过发送一个数据串从而获取到使用对应端口的服务回应的banner ?...在[PSH,ACK]字段中可以看到我们通过套接字发送的数据: ? ? ? 重要通知 公众号招募文章投稿小伙伴啦!

    97810
    领券