首页 > 编程语言 > 详细

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

时间:2019-04-25 11:06:03      阅读:318      评论:0      收藏:0      [点我收藏+]

一、TCP、UDP区别总结

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

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

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

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

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

 

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

服务器端:

from socket import * 

#创建流式套接字
sockfd = socket(AF_INET,SOCK_STREAM,0)

#绑定IP端口
sockfd.bind((‘192.168.80.217,8888))

#设置监听套接字,创建监听队列
sockfd.listen(5)

while True:
    print("waiting for connect....")
    #等待客户端链接
    connfd,addr = sockfd.accept()
    # accept函数主要用于服务器端,一般位于listen函数之后,默认会阻塞进程,
    # 直到有一个客户请求连接,建立好连接后,它返回的一个新的套接字connfd,
    # 此后,服务器端即可使用这个新的套接字connfd与该客户端进行通信,
    # 而sockfd则继续用于监听其他客户端的连接请求
    print("connect from",addr)

    while True:
        #收消息
        data = connfd.recv(1024)
        if not data:
            break
        print(data.decode())

        #发消息
        connfd.send(来,确认下眼神.encode())
    #关闭套接字
    connfd.close()

sockfd.close()

客户端:

from socket import * 

#创建套接字
sockfd = socket(AF_INET,SOCK_STREAM)

#发起连接
sockfd.connect((‘192.168.80.217,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 

#从命令行传入IP和端口
#python3 udp_server.py 172.60.50.42 8888
if len(sys.argv) < 3:
    print(‘‘‘
           argv is error!!!
           input as 
           python3 udp_server.py 172.60.50.42 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)
    print(recv from %s:%s%(addr,data.decode()))
    sockfd.sendto    (("[%s] 接收到消息"%ctime()).encode(),addr)

sockfd.close()

客户端:

from socket import * 
import sys 

#从命令行传入IP和端口
#python3 udp_server.py 172.60.50.42 8888
if len(sys.argv) < 3:
    print(‘‘‘
           argv is error!!!
           input as 
           python3 udp_server.py 172.60.50.42 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阻塞进程来等待客户端连接,UDP是面向无连接的则不需要

3、收发消息

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

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

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

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

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

原文:https://www.cnblogs.com/hooo-1102/p/10766949.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!