T C P提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。这就是所谓
下载
的半关闭。正如我们早些时候提到的只有很少的应用程序使用它。
为了使用这个特性,编程接口必须为应用程序提供一种方式来说明“我已经完成了数据
传送,因此发送一个文件结束( F I N)给另一端,但我还想接收另一端发来的数据,直到它给
我发来文件结束(F I N)”。
如果应用程序不调用c l o s e而调用s h u t d o w n,且第2个参数值为1,则插口的A P I支持
半关闭。然而,大多数的应用程序通过调用close终止两个方向的连接。

为什么要有半关闭?一个例子是 U n i x中的r s h( 1 )命令,它将完成在另一个系统上执行一
个命令。命令
sun % rsh bsdi sort < datafile
将在主机b s d i上执行s o r t排序命令,r s h命令的标准输入来自文件d a t a f i l e。r s h将在它
与在另一主机上执行的程序间建立一个 T C P连接。 r s h的操作很简单:它将标准输入
(d a t a f i l e)复制给T C P连接,并将结果从 T C P连接中复制给标准输出(我们的终端)。图显示了这个建立过程(牢记TCP连接是全双工的)。

在远端主机b s d i上,r s h d服务器将执行s o r t程序,它的标准输入和标准输出都是 T C P
连接。
s o r t程序只有读取到所有输入数据后才能产生输出。所有的原始数据通过 T C P连接从
r s h客户端传送到s o r t服务器进行排序。当输入( d a t a f i l e)到达文件尾时, r s h客户端
执行这个T C P连接的半关闭。接着s o r t服务器在它的标准输入(这个 T C P连接)上收到一个
文件结束符,对数据进行排序,并将结果写在它的标准输出上( T C P连接)。r s h客户端继续
接收来自T C P连接另一端的数据,并将排序的文件复制到它的标准输出上。
没有半关闭,需要其他的一些技术让客户通知服务器, 客户端已经完成了它的数据传送,但
仍要接收来自服务器的数据。使用两个T C P连接也可作为一个选择,但使用半关闭的单连接更好。

TCP的半连接的更多相关文章

  1. tcp的半连接与完全连接队列

    队列及参数 https://segmentfault.com/a/1190000008224853 server端的半连接队列(syn队列) 在三次握手协议中,服务器维护一个半连接队列,该队列为每个客 ...

  2. (转)tcp的半连接与完全连接队列

    队列及参数   tcp-sync-queue-and-accept-queue-small.jpg server端的半连接队列(syn队列) 在三次握手协议中,服务器维护一个半连接队列,该队列为每个客 ...

  3. tcp的半连接与完全连接队列(二)

    队列及参数 server端的半连接队列(syn队列) 在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户端的SYN包开设一个条目(服务端在接收到SYN包的时候,就已经创建了request_s ...

  4. tcp的半连接与完全连接队列(三)源码分析

    TCP 协议中的 SYN queue 和 accept queue 处理 若要理解本文意图说明的问题,可能需要以下知识背景: listen 系统调用的 backlog 参数含义,以及与 net.cor ...

  5. PYTHON-网络通信 TCP

    网络编程: 学习网络编程 为什么?目的: 服务端特点: 网络通讯(通信) 什么是网络通讯? 为什么?目的:网络建立的目的是为数据交互(通信) 如何实现通讯(通信)? 互联网协议 互联网=物理连接介质+ ...

  6. TCP/IP编程——基于TCP的半关闭

    在TCP服务端和客户端建立连接之后服务端和客户端会分别有两个独立的输入流和输出流,而且相互对应.服务端的输出流对应于客户端的输入流,服务端的输入流对应于客户端的输出流.这是在建立连接之后的状态. 当我 ...

  7. 7.4 (java学习笔记)网络编程之TCP

    一.TCP 1.1 TCP(Transmission Control Protocol 传输控制协议),是一种面向连接的,安全的传输协议,但效率相比于UDP而言比较低. TCP传输时需要确保先建立连接 ...

  8. 常见问题:计算机网络/运输层/TCP

    TCP 面向连接,全双工,点对点. TCP头格式 TCP包没有IP地址,IP地址在网络层的IP协议中,TCP包包括源端口号,目标端口号 一个TCP连接需要四个元祖表明是同一连接(src_ip,src_ ...

  9. TCP的三次握手四次挥手理解及面试题

    一.TCP概述 每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字, 例如,若IP地址为192.0.0.1 而端口号为8000,那么得到 ...

随机推荐

  1. luoguP1463:反素数ant(打表心得☆)

    题目描述 对于任何正整数x,其约数的个数记作g(x).例如g()=.g()=. 如果某个正整数x满足:g(x)>g(i) <i<x,则称x为反质数.例如,整数1,,,6等都是反质数. ...

  2. 从零开始学游戏开发(一):下载与安装UE4游戏引擎

    如何下载和安装虚幻引擎 下载Epic Games Launcher 步骤 百度搜索"what is ue4" 点击第一个搜索结果,进入ue4官网 进入官网首页,点击右上角下载 创建 ...

  3. [转载]ftp和http区别

    本文围绕以下三个部分展开: 一.HTTP协议 二.FTP协议 三.HTTP与FTP的异同点 一.HTTP协议简介 1. 概念 HTTP: HyperText Transfer Protocal,超文本 ...

  4. [ReferenceError: __insane_exports is not defined] [monaco-editor@0.18.0] [vue] [typescript]

    npm install monaco-editor@ 安装上面的命令,安装0.17.0版本.

  5. C++中静态成员函数和普通成员函数存储方式相同

    先从一个示例查看类的创建过程中,静态成员函数和普通成员函数的存储区别. #include "stdafx.h" #include<iostream> #include& ...

  6. BinaryTree(HDU-5573)【思维/构造】

    题目链接:https://vjudge.net/problem/HDU-5573 题意:一棵二叉树,编号代表对应节点的取值,可以走k步,每次走的层数递增,问能够达到N的方案. 思路:首先看一下数据范围 ...

  7. LC 98. Validate Binary Search Tree

    题目描述 Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defin ...

  8. linux下添加用户并将文件夹授权给某一个用户

    ### linux下添加用户并将文件夹授权给某一个用户 背景:在做一个项目时,需要外包的前端人员调试测试环境的页面,但是又不能给他服务器的账号信息,就在服务器上新添加一个子账户,再给这个账户项目文件的 ...

  9. python学习-11 运算符2

    布尔值 1.真 true 假false name = 'abc' c = 'c' in name print(c) 运算结果: True Process finished with exit code ...

  10. 解决IIS出现“由于权限不足而无法读取配置文件”的问题

    在部署IIS项目的时候,今天突然遇到了如下问题: HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效 详细错误信息: 由于权限 ...