创建Socket:
该函数带有两个参数(参数必须写):
a. AF_INET(ipv4协议⽤于 Internet 进程间通信)
b. 套接字类型, 可以是 SOCK_STREAM(流式套接字, ⽤于TCP 协议) 或者 SOCK_DGRAM(数据报套接字, ⽤于 UDP 协议)
TCP慢但是稳定不会丢数据
UDP快但是可能会丢数据(黑客攻击)
确定了IP地址端口号(ipv4协议),TCP或UDP协议之后,计算机之间可以进行通信
""" UDP发送数据 """ from socket import * # 导入套接字模块 s = socket(AF_INET,SOCK_DGRAM) #创建套接字 addr = ("192.168.42.44",8080) # 用于接收数据的ip地址,端口号 data = input("请输入要发送的内容:") s.sendto(data.encode("gb2312"),addr) # data.encode("gb2312"),data的数据转换为网络调试助手能识别的编码方式 s.sendto(b"abcd",addr) """ 发送数据时,python3需要将字符串转成byte encode(‘utf-8’) # 用utf-8对数据进行编码,获得bytes类型对象 decode()反过来 """ redata = s.recvfrom(1024) # 参数 1024 代表本次接收能接收到的最大数据的字节数 print(redata[0].decode("gb2312")) # redata[0]代表接收到的第一个数据 s.close()作为数据得接收方,需要事先绑定一个端口号: s.band(("IP地址",端口号))
from socket import * s = socket(AF_INET,SOCK_DGRAM) s.bind(("", 8088)) # 用一个元组传入(“ip地址”,端口号),注意:传给本机的时候"ip地址" 可以不用写 s.sendto(b"abc", ("192.168.42.44",8585)) # 对方的地址也是元组表示 #等待接收数据 redata = s.recvfrom(1024) #1024表示本次接收的最大字节数 print(redata[0].decode())echo 服务器: 接受到什么原封发回
from socket import * udpSock =socket(AF_INET,SOCK_DGRAM) udpSock.bind(("",8585)) while True: recvData = udpSock.recvfrom(1024) udpSock.sendto(recvData[0], recvData[1]) udpSock.close()创建聊天室
聊天室 1: 先发后收
from socket import * udpSock =socket(AF_INET,SOCK_DGRAM) udpSock.bind(("192.168.42.44",8581)) while True: data = input("请输入:\n") udpSock.sendto(data.encode(), ("192.168.42.44",8580)) recvData = udpSock.recvfrom(1024) print(recvData[0].decode()) udpSock.close()聊天室 2: 先收后发
from socket import * udpSock =socket(AF_INET,SOCK_DGRAM) udpSock.bind(("192.168.42.44",8580)) while True: recvData = udpSock.recvfrom(1024) print(recvData[0].decode()) data = input("请输入:\n") udpSock.sendto(data.encode(), ("192.168.42.44",8581)) udpSock.close()