一、TCP、UDP区别总结

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性较高的通信或广播通信

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP对系统资源要求较多,UDP对系统资源要求较少

 二、TCP服务端以及客户端编程

服务器端:

from socket import *

#创建套接字sockfd
sockfd = socket() #默认参数可以创建tcp套接字 #套接字绑定ip,端口
sockfd.bind(('192.168.191.1',8888)) #让套接字具有监听功能,创建监听队列
sockfd.listen(5) while True:
print("waiting for connect....")
connfd,addr = sockfd.accept()
# accept函数主要用于服务器端,一般位于listen函数之后,默认会阻塞进程,
# 直到有一个客户请求连接,建立好连接后,它返回的一个新的套接字connfd,以及客户的地址addr,
# 此后,服务器端即可使用这个新的套接字connfd与该客户端进行通信,
# 而sockfd则继续用于监听其他客户端的连接请求
print("connect from",addr)
while True:
data = connfd.recv(1024) #收消息
if not data:
break
print("客户端发来的消息:",data.decode())
#发消息通过str.decode()编码 connfd.send("服务端已收到消息!".encode()) #发消息
#收消息通过str.encode()解码 connfd.close() sockfd.close()

客户端:

from socket import *

#创建套接字
sockfd = socket() #发起连接
sockfd.connect(('192.168.191.1',8888)) while True:
msg = input("发消息>>")
#服务端那边是先收消息,所以客户端就先发
#发消息
sockfd.send(msg.encode())
if not msg:
break #收消息
data = sockfd.recv(1024)
print(data.decode()) sockfd.close()

三、UDP服务端以及客户端编程

服务器端:

from socket import *
import sys
from time import ctime #这里使用了一个sys.agrv,从命令行传入IP和端口
#格式:python3 udp_server.py 192.168.191.1 8888 #如果输入格式不对,给一个提示信息
if len(sys.argv) < 3:
print('''
argv is error!!!
input as
python3 udp_server.py 192.168.191.1 8888
''') HOST = sys.argv[1]
PORT = int(sys.argv[2])
ADDR = (HOST,PORT)
BUFFERSIZE = 1024 #创建数据报套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
#绑定地址
sockfd.bind(ADDR) while True:
#收消息
data,addr = sockfd.recvfrom(BUFFERSIZE)
#recvfrom()和recv()有点不同,recvfrom()返回的是接收到的消息和消息发送者的地址
print('recv from %s:%s' %(addr,data.decode())) #发消息
sockfd.sendto((" %s 接收到消息" %ctime()).encode(),addr)
#sendto()和send()也有点不同,sendto()有两个参数,一个为发送的消息,另一个是发送给某个主机的地址 sockfd.close()

客户端:

from socket import *
import sys #从命令行传入IP和端口
#python3 udp_server.py 192.168.191.1 8888
if len(sys.argv) < 3:
print('''
argv is error!!!
input as
python3 udp_server.py 192.168.191.1 8888
''') HOST = sys.argv[1]
PORT = int(sys.argv[2])
ADDR = (HOST,PORT)
BUFFERSIZE = 1024 #创建数据报套接字
sockfd = socket(AF_INET,SOCK_DGRAM) while True:
#发消息
data = input("消息>>")
if not data:
break
sockfd.sendto(data.encode(),ADDR) #收消息
data,ADDR = sockfd.recvfrom(BUFFERSIZE)
print('从服务器收到:',data.decode())
sockfd.close()

四、TCP和UDP编程步骤区别总结

1、创建套接字

TCP使用的是SOCK_STREAM(套接字类型:字节流),SOCK_STREAM这种的特点是面向连接的,即每次收发数据之前必须通过connect建立连接

UDP使用的是SOCK_DGRAM(套接字类型:数据包),SOCK_DGRAM这种是User Datagram Protocol协议的网络通讯,它是无连接的,不可靠的

2、TCP服务端使用listen开启监听以及accept阻塞进程来等待客户端连接(所以TCP对系统资源要求较多),UDP是面向无连接的则不需要

3、收发消息

TCP使用的是recv()接收消息,send()发送消息

UDP使用的是recvfrom()循环接收数据,sendto()发送数据

*TCP一旦发生丢包,TCP将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大

UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络造成的影响

TCP和UDP的区别以及使用python服务端客户端简单编程的更多相关文章

  1. Python TCP与UDP的区别

    TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP通信需要经过创建连接.数据传送.终止连接 ...

  2. 面试官:说说TCP和UDP的区别和应用场景

    原创文章首发于公众号:「码农富哥」,欢迎收藏和关注,如转载请注明出处! 上一篇聊完 一文彻底搞懂 TCP三次握手.四次挥手过程及原理 这次聊聊TCP和UDP的区别和场景 TCP/IP 中有两个具有代表 ...

  3. OSI参考模型及各层功能,TCP与UDP的区别

    OSI参考模型:ISO/IEC 7498标准定义了网络互联的7层结构模型,即开放系统互连参考模型. OSI参考模型定义了开放系统的层次结构.层次之间的相互关系,以及各层所包括的可能的服务.OSI的服务 ...

  4. TCP与UDP的区别

    TCP与UDP的区别 TCP面向连接:UDP是无连接,即发送数据之前不需要建立连接 TCP提供可靠的服务,TCP连接传送的数据,无差错.不丢失.不重复,且按顺序到达:UDP尽最大努力交付,即不保证可靠 ...

  5. TCP和UDP的区别(转)

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

  6. TCP与UDP的区别(转)

    源:http://blog.chinaunix.net/uid-20745340-id-1878774.html 参考:TCP协议与UDP协议的区别 TCP与UDP的区别 中国移动.中国联通推行的GP ...

  7. 【基础网络】TCP与UDP 的区别

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

  8. 【转】TCP/IP协议中TCP和UDP的区别

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

  9. 知其所以然~tcp和udp的区别

    TCP UDP TCP与UDP基本区别 基于连接与无连接 TCP要求系统资源较多,UDP较少: UDP程序结构较简单 流模式(TCP)与数据报模式(UDP); TCP保证数据正确性,UDP可能丢包 T ...

随机推荐

  1. mysql学习基础知识3

    1.视图 简化sql语句的编写,限制可以查看的数据 一张虚拟的表,不占任何内存,查视图时都是临时从所查的表中拿数据 特点: 对于视图的增删改查 都会同步到原始表 对原始表的修改,会同步到视图内可查看的 ...

  2. python经典例题100题01

    [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? ans = [i*100+j*10+k for i in range(1, 5) for j in ra ...

  3. 命令级的python静态资源服务。

    python -m SimpleHTTPServer 在当前目录起python静态资源服务.

  4. python之路day12--装饰器的进阶

    装饰器# 开发原则:开发封闭原则# 装饰器的作用:在不改变原函数的调用函数下,在函数的前后添加功能.# 装饰器的本质:闭包函数 import time def timmer(f): #func #ti ...

  5. 【转载】Nginx + Tomcat 实现反向代理

    通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服 ...

  6. Python模拟弹道轨迹

    http://www.itongji.cn/cms/article/articledetails?articleid=5029 最近美国把萨德系统部署到韩国,一时心血来潮就用python模拟最简单的弹 ...

  7. Apache Hadoop 2.9.2 的快照管理

    Apache Hadoop 2.9.2 的快照管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 快照相当于对目录做一个备份.并不会立即复制所有文件,而是指向同一个文件.当写入发生 ...

  8. [图解Java]Condition

    图解Condition 0. demo 我先给出一个demo, 这样大家就可以根据我给的这段代码, 边调试边看源码了. 还是那句话: 注意"My" , 我把ReentrantLoc ...

  9. Elasticsearch 快速开始

    Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎. 查询 : Elasticsearch 允许执行和合并多种类型的搜索 - 结构化.非结构化.地理位置.度量指标 - ...

  10. python常用的内置函数

    python常用的内置函数集合做一个归类用的时候可以查找- abs 返回数字x的绝对值或者x的摸 - all (iterable)对于可迭代的对象iterable中所有元素x都有bool(x)为tru ...