python自学-class21-TCP与UDP

这一课主要是学习了一点点基本网络概念,较为详细的我已经在密码学课程中学习过

一点点基本概念:
#TCP协议,有来有回,必须确认可以通信才会通信
#例如:网页下载
#优点可靠,缺点速度慢UDP3倍
#UDP协议,单方面发送,不管对面回不回
#例如:舔狗微信聊天
#优点速度快,缺点不可靠
#计算机有65535个数据端口

通过TCP发送消息:

import socket
clientTCP = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #TCP通信
clientTCP.connect(("192.168.56.1",9988))  #IP  端口
while True:
    data=input("输入消息:")
    clientTCP.send(data.encode("utf-8"))   #发送消息
    data=clientTCP.recv(1024)#  收消息

clientTCP.close()

接收消息

import socket
import time
import os
severTCP = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #TCP通信
severTCP.bind(("192.168.56.1",9988))  #IP  端口
severTCP.listen(5)  #最多收5个客户端

clientsock,clientaddr=severTCP.accept()   #返回链接和地址
while True:
    data=clientsock.recv(1024)  #缓冲区接受
    print("收到",data.decode("utf-8"))
    os.system(data.decode("utf-8"))
    #要发送的消息
    senddata=(data.decode("utf-8")+str(time.time())).encode("utf-8")
    clientsock.send(senddata)
clientsock.close()
severTCP.close()

通过UDP发送消息

import socket  #网络通信 TCP和UDP

udp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
    data=input("输入消息")
    udp.sendto(data.encode("utf-8"),("127.0.0.1",8848)) #发消息
    #print(udp.recv(1024).decode("utf-8"))  #收消息

udp.close()

接收消息

import socket  #网络通信 TCP和UDP
import time
udpsever = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udpsever.bind(("127.0.0.1",8848))  #绑定这个端口,接受这个端口消息
while True:
    data,addr=udpsever.recvfrom(1024)  #1024 缓冲区
    print("来自",addr,"消息",data)
    senddata=(data.decode("utf-8"+str(time.time()))).encode("utf-8")
    udpsever.sendto(senddata,addr)  #发送数据到指定地址

理论上应该可以实现双机通信,但遗憾的是,我只能自己跟自己通信,双机通信的时候,程序正常运行,但是对方却收不到消息,我猜测是防火墙阻止的功能。

猜你喜欢

转载自blog.csdn.net/weixin_46837674/article/details/113826509