python服务端编程_TCP和UDP的区别以及使用python服务端客户端简单编程

一、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)whileTrue:print("waiting for connect....")

connfd,addr=sockfd.accept()#accept函数主要用于服务器端,一般位于listen函数之后,默认会阻塞进程,

#直到有一个客户请求连接,建立好连接后,它返回的一个新的套接字connfd,以及客户的地址addr,

#此后,服务器端即可使用这个新的套接字connfd与该客户端进行通信,

#而sockfd则继续用于监听其他客户端的连接请求

print("connect from",addr)whileTrue:

data= connfd.recv(1024) #收消息

if notdata: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))whileTrue:

msg= input("发消息>>")#服务端那边是先收消息,所以客户端就先发

#发消息

sockfd.send(msg.encode())if notmsg:break

#收消息

data = sockfd.recv(1024)print(data.decode())

sockfd.close()

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

服务器端:

from socket import *

importsysfrom time importctime#这里使用了一个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)whileTrue:#收消息

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 *

importsys#从命令行传入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)whileTrue:#发消息

data = input("消息>>")if notdata:breaksockfd.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对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络造成的影响

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值