TCP协议,传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP通信需要经过创建连接、数据传送、终止连接三个步骤。

案例:利用TCP从服务器下载文件至客户端

案例分析:

客户端:

1、建立套接字

2、数据链接至服务器

3、发送要下载文件名称至服务器

4、接收服务器传来的数据,并保存至本地

5、关闭套接字

服务器:

1、建立套接字

2、转套接字状态由主动为被动

3、接收监听到的请求并保存、创建新的套接字

4、读取请求文件内容

5、新的套接字发送文件内容至客户端

6、关闭套接字

客户端TCP程序:

import socket

def main():

tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

tcp_client.connect((input("请输入服务器IP:"),int(input("请输入服务器port:"))))

data_file_name = input("请输入要下载的文件:")

tcp_client.send(data_file_name.encode("utf-8"))

with open("[复件]"+data_file_name,"wb") as f:

f.write(tcp_client.recv(1024))

tcp_client.close()

if __name__ == "__main__":

main()

服务器TCP程序:

import socket

def main():

tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

tcp_server.bind(("",8080))

tcp_server.listen(128)

new_tcp_server, client_addr = tcp_server.accept()

file_data = new_tcp_server.recv(1024)

content = None

try:

f = open(file_data.decode("utf-8"))

content = f.read("rb")

f.close()

except Exception:

print("对不起,你请求的文件(%s)不存在" % file_data)

if content:

new_tcp_server.send(content.encode("utf-8"))

print("下载成功!")

new_tcp_server.close()

tcp_server.close()

if __name__ == "__main__":

main()

TCP的数据传输的更多相关文章

  1. TCP可靠数据传输

    TCP可靠数据传输   在TCP在IP不可靠的尽力而为的服务之上,创建了一条可靠数据传输服务(reliable data transfer service).TCP提供的可靠数据传输的方法涉及到可靠数 ...

  2. 动手学习TCP:数据传输

    前面的文章介绍了TCP状态变迁,以及TCP状态变迁图中的一些特殊状态. 本文主要看看TCP数据传输过程中需要了解的一些重要点: MSS(Maximum Segment Size) Seq号和Ack号的 ...

  3. 动手学习TCP:数据传输(转)

    前面的文章介绍了TCP状态变迁,以及TCP状态变迁图中的一些特殊状态. 本文主要看看TCP数据传输过程中需要了解的一些重要点: MSS(Maximum Segment Size) Seq号和Ack号的 ...

  4. TCP的数据传输小结

    TCP的交互数据流 交互式输入 通常每一个交互按键都会产生一个数据分组,也就是说,每次从客户传到服务器的是一个字节的按键(而不是每次一行) 经受时延的确认 通常TCP在接受到数据时并不立即发送ACK: ...

  5. 无连接运输的UDP、可靠数据传输原理、面向连接运输的TCP

    由[RFC 768]定义的UDP只是做了运输协议能够做的最少工作.除了复用/分解功能极少量的差错检测外,它几乎没有对IP增加别的东西.如果应用程序开发人员选择UDP而不是TCP,则该应用程序差不多就是 ...

  6. TCP的三次握手(建立连接)和四次挥手(关闭连接)

    参照: http://course.ccniit.com/CSTD/Linux/reference/files/018.PDF http://hi.baidu.com/raycomer/item/94 ...

  7. TCP/IP协议与UDP协议的区别

    TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次“对话”才能建立起来, ...

  8. TCP协议与UDP协议的区别

    TCP协议与UDP协议的区别(转) 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  9. TCP、UDP协议间的区别(转)

    一.TCP/IP协议是一个协议簇.里面包括很多协议的.UDP只是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了. TCP/IP协议集包括应用层,传输层 ...

随机推荐

  1. sqlite常用的命令-增删改查

    一.查看版本信息: #sqlite3 -version 二.sqlite3常用命令 1.当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识: 2. ...

  2. linux内核动态打印

    参考:https://www.cnblogs.com/pengdonglin137/p/4622460.html https://linux.cn/article-3682-1.html?pr 如何打 ...

  3. 20144303 《Java程序设计》第三周学习总结

    20144303 <Java程序设计>第三周学习总结 教材学习内容总结 •对象是存在的具体实体,具有明确的状态和行为,类是具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属 ...

  4. windows下Redis主从复制配置(报错:Invalid argument during startup: unknown conf file parameter : slaveof)

    主从复制配置中的遇到的异常: Invalid argument during startup: unknown conf file parameter :  slaveof 把Redis文件夹复制两份 ...

  5. asp.net core 发布 不打包cshtml 文件

    需要在 FolderProfile.pubxml 文件中添加 FolderProfile.pubxml <MvcRazorCompileOnPublish>false</MvcRaz ...

  6. 在.Net中进行SQL Server数据库备份与还原操作实用类

    #region 类说明 //----------------------------------------------------------------------------- // // 项目 ...

  7. git-svn — 让git和svn协同工作

     git-svn — 让git和svn协同工作 svn作为一个优秀源码版本的管理工具,可以适合绝大多数项目.但是因为它的采用中心化管理,不可避免的存在本地代码的备份和版本管理问题.也就是说对于尚未或暂 ...

  8. 使用 Python 在 Caché 和 Sql Server 之间同步数据

    任务目标:抽取 Caché 中的数据,导入 Sql Server 中. 遇到的问题: 1.UnicodeEncodeError: ‘ascii’ codec can’t encode characte ...

  9. Mercurial的使用心得

    本文发表地址:http://www.xiabingbao.com/mercurial/2015/01/22/mercurial-understanding/ 本人接触版本控制的历史 在很久很久以前,我 ...

  10. char数组

    *****************************************************************char 类型的数组(c语言中是没有字符串的)char name[20 ...