@

1.TCP是什么

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1] 定义。

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

2.代码实现

客户端

  1. import socket
  2. def main():
  3. tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  4. host='127.0.0.1'
  5. port=7897
  6. addr=(host,port)
  7. tcp_socket.bind(addr)
  8. tcp_socket.connect(("127.0.0.1",7898))
  9. #发送数据,接收数据
  10. while True:
  11. send_data = input("请输入:")
  12. tcp_socket.send(send_data.encode("utf-8"))
  13. recv_data = tcp_socket.recv(1024)
  14. print("返回的数据是:%s" % recv_data.decode("utf-8"))
  15. if send_data == "exit":
  16. break
  17. tcp_socket.close()
  18. if __name__ == '__main__':
  19. main()

接收端


  1. import socket
  2. def main():
  3. tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  4. host=''
  5. port=7898
  6. addr=(host,port)
  7. tcp_server_socket.bind(addr)
  8. #相当于把手机设置为响铃模式,让默认的套接字由主动变为被动
  9. tcp_server_socket.listen(128)
  10. while True:
  11. #相当于等待别人的电话到来
  12. new_client_socket,client_addr = tcp_server_socket.accept()
  13. print(client_addr)
  14. #循环目的:为一个客户服务多次
  15. while True:
  16. # 接收客户端发过来的请求
  17. recv_data = new_client_socket.recv(1024)
  18. #如果recv堵塞,那么有两种办法
  19. #1.客户端发送过来的数据
  20. #2.客户端调用close
  21. if recv_data:
  22. print("客户端发过来的请求是:%s" % recv_data.decode("utf-8"))
  23. # 回复一部分数据给客户端
  24. new_client_socket.send("我已收到".encode("utf-8"))
  25. else:
  26. break
  27. #关闭accept返回的套接字,相当于不给这个用户服务了
  28. new_client_socket.close()
  29. print("该用户已经服务完毕")
  30. #关闭服务套接字,无法等待client到来
  31. tcp_server_socket.close()
  32. if __name__ == '__main__':
  33. main()

注意

  • 客户端必须要连接服务端
  • 服务器端收到数据后可以返回部分数据给客户端
  • new_client_socket,client_addr = tcp_server_socket.accept()表示,收到的东西是一个socket对象和一个ip地址
  • 服务器端可以多次为客户端服务,为多个客户端服务

网络编程-python实现-TCP(1.1.3)的更多相关文章

  1. 网络编程-python实现-TCP实现文件下载(1.1.4)

    @ 目录 代码实现 代码实现 客户端 from socket import * def main(): # 创建socket tcp_client_socket = socket(AF_INET, S ...

  2. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  3. Android网络编程系列 一 TCP/IP协议族

    在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...

  4. 网络编程Socket之TCP之close/shutdown具体解释(续)

    接着上一篇网络编程Socket之TCP之close/shutdown具体解释 如今我们看看对于不同情况的close的返回情况和可能遇到的一些问题: 1.默认操作的close 说明:我们已经知道writ ...

  5. 用java网络编程中的TCP方式上传文本文件及出现的小问题

    自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...

  6. TCP/IP网络编程之基于TCP的服务端/客户端(二)

    回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...

  7. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅     1 TCP的开销 a ...

  8. C#网络编程入门之TCP

    目录: C#网络编程入门系列包括三篇文章: (一)C#网络编程入门之UDP (二)C#网络编程入门之TCP (三)C#网络编程入门之HTTP 一.概述 UDP和TCP是网络通讯常用的两个传输协议,C# ...

  9. Python进阶(1)_Socket网络编程(基于tcp的socket)

    网络协议参考:http://www.cnblogs.com/hedeyong/p/6889774.html 一.TCP/IP五层模型 学习socket一定要先学习互联网协议: 1.首先:本节课程的目标 ...

随机推荐

  1. FL Studio中有关Sub Bass的一些制作与混音技巧

    1.Sub Bass是什么? Sub Bass是一种低沉的低音,其频率大约低于60赫兹,并向下延伸,包括人类所能听到的最低频率,约为20赫兹.在这个范围内,人类的听觉不是很灵敏,所以在这个范围内的声音 ...

  2. 线程池中状态与线程数的设计分析(ThreadPoolExecutor中ctl变量)

    目录 预备知识 源码分析 submit()源码分析 shutdownNow()源码分析 代码输出 设计目的与优点 预备知识 可以先看下我的另一篇文章对于Java中的位掩码BitMask的解释. 1.一 ...

  3. php进阶学习-单例设计模式

    什么是单例模式(singleton)? 在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点. 单例模式的特点 一个类只有一个实例 私有克隆 ...

  4. Java集合【9】-- Vector源码解析

    目录 1.Vector介绍 2. 成员变量 3. 构造函数 4. 常用方法 4.1 增加 4.2 删除 4.3 修改 4.4 查询 4.5 其他常用函数 4.6 Lambda表达式相关的方法 4.7 ...

  5. @Async失效之谜

    @Async如何使用 异步的方法上加上@Async异步注解 启动类中需要加上@EnableAsync才有效 使用时类似于下列函数: new Thread(()-> System.out.prin ...

  6. 使用react终端运行npm start时报错

    npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! my-app@0.1.0 start: `react-scripts start` npm ERR ...

  7. Java 生成有序 UUID

    UUID.randomUUID() 生成的 UUID 是无序的,如果作为数据主键,不利于索引 Hibernate 的 UUIDHexGenerator.generate() 方法可以生成有序的 UUI ...

  8. day8(使用celery异步发送短信)

    1.1在celery_task/mian.py中添加发送短信函数 # celery项目中的所有导包地址, 都是以CELERY_BASE_DIR为基准设定. # 执行celery命令时, 也需要进入CE ...

  9. PyQt(Python+Qt)学习随笔:QDateTimeEdit日期时间编辑部件

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 Designer输入部件中,Date/Time E ...

  10. PyQt(Python+Qt)学习随笔:QDockWidget停靠部件的dockWidgetArea和docked属性

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 dockWidgetArea和docked属性这两个属性在Design ...