这一课主要是学习了一点点基本网络概念,较为详细的我已经在密码学课程中学习过
一点点基本概念:
#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) #发送数据到指定地址
理论上应该可以实现双机通信,但遗憾的是,我只能自己跟自己通信,双机通信的时候,程序正常运行,但是对方却收不到消息,我猜测是防火墙阻止的功能。