UDP/TCP 基础网络编程 (python)

本文详细讲解了如何使用Python进行UDP和TCP网络编程,包括套接字基础、UDP的三阶段操作、TCP的四阶段流程,并提供了服务器端与客户端的示例代码。重点介绍了UDP的无连接特性与TCP的连接建立过程。
摘要由CSDN通过智能技术生成

UDP/TCP 基础网络编程 (python)

网络编程基本模块

socket 套接字:Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。应用层就可以与传输层之间通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
无论是使用udp还是tcp传输协议,都需要使用套接字socket建立连接,不同的是tcp是面向连接的可靠传输,需要有确认连接之后才能够进行通信。

udp

使用udp网络协议,不需要确认连接,主要包括三阶段:
1、创建套接字
2、传输数据
3、关闭套接字
值得注意的是,在作为客户端时,套接字不需要绑定端口,但是在作为服务器时,一定需要绑定端口,这就类似要告诉别人你有一个固定的电话号码,别人能够接通。

udp服务端
# 创建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 绑定端口
loacl_addr = ('',64361)   #必须绑定自己的ip和端口
udp_socket.bind(loacl_addr)
# 接收数据
recv_data = udp_socket.recvfrom(1024)  #返回的是一个元组(数据,ip地址)
print('接收内容为:',recv_data[0].decode("gbk"))  # windows 传入的数据是GBK编码,一般是utf-8
# 关闭连接
udp_socket.close()

#可以自行通过while嵌套循环,实现循环收发
udp客户端
# 创建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 发送数据
dest_ip = input("请输入对方IP")
dest_port = int(input("请输入端口"))   #可以try,捕获异常
sent_data  = input("请输入要发送的数据")
udp_socket.sendto(sent_data.encode("utf-8"),(dest_ip,dest_port))
#关闭连接
udp_socket.close()

tcp

与udp网络协议不同,tcp协议需要建立可靠的连接,其主要包括四个阶段:
1、创建套接字
2、建立连接
3、发送数据
4、关闭套接字
tcp网络协议中,作为服务器时,必须使用bind,进行绑定,同时还需要设置listen以及accept建立与客户端的联系

tcp服务端
# socket创建套接字
tcp_sever = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#bind绑定ip port
tcp_sever.bind(("",12345))
#listen 使套接字可以变为被动链接,监听,相当于总的分配口
tcp_sever.listen(128)
while True:
	client_socket, client_addr = tcp_sever.accept()   #accept返回的是一个元组,(socket,ip)socket是指当前与其连接成功的一个套接字,当上一个连接关闭,新的客户端接入,其又是新的一个socket
	while True:
		recv_data = client_socket.recv(1024)  # 接收
		'''
        # 这里使用recv_data ==None判断不可以;这种方法是错误的,当客户端关闭连接是,会报错说连接已经建立了
        if not recv_data:    # 数字不为0、元组列表不为空、true 成立 None/false不成立		
        	print("该客户服务完毕")
                break
            else:
                print("客户端发送过来的数据:",recv_data.decode("gbk"))
                client_socket.send("hahahhah----ok----\n".encode("utf-8"))  # 回复'''

         if recv_data:
	         print("客户端发送过来的数据:", recv_data.decode("gbk"))
             client_socket.send("hahahhah----ok----\n".encode("utf-8"))  # 回复
         else:
            print("该客户服务完毕")
            break
        client_socket.close()
        print("服务完毕")
    #关闭连接
    tcp_sever.close()
tcp客户端
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接服务器
# tcp_socket.connect(("192.168.1.2",7890))  #本地测试时,为避免重复输入,可以 直接写死
ip = input("请输入连接服务器IP")
port = int(input("请输入连接端口:"))
sever_addr = (ip,port)
tcp_socket.connect(sever_addr)
#发送数据
send_data = input("请输入需要发送的数据")
tcp_socket.send(send_data.encode('utf-8'))
#关闭连接
tcp_socket.close()

在进行测试的时候,应当根据本机实际情况进行适当修改,但无论使用哪个协议,作为客户端或者服务端,工作的大致流程不会变,具体应用时,双方交互的数据可能发生变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值