socket
socket介绍
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
socket的使用
udp发送数据
步骤
- 1、创建套接字
socket.socket([family[, type[, proto]]])
- family: 套接字家族可以使AF_UNIX或者AF_INET
- type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM
- protocol: 一般不填默认为0.
- 代码示例
udp_s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
- 2、发送数据
sendto(self, data: bytes, address: _Address)
- data:发送的内容,类型为字节型的
- address:目的地址,一般用元组表示
- 代码示例
udp_s.sendto(b'hello', ('192.168.1.3', 8080))
- 3、关闭套接字
- 代码示例
udp_s.close()
- 代码示例
完整演示
import socket
def sendto():
# 1、创建套接字
udp_s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
# 2、发送数据
while True:
content = input("请输入要发送的内容:")
# 默认输入q退出聊天
if content == 'q':
break
# 将字符串转成gbk编码,windows系统默认是gbk编码
content = content.encode('gbk')
udp_s.sendto(content, ('192.168.1.3', 8080))
# 3、关闭套接字
udp_s.close()
if __name__ == '__main__':
sendto()
注意: 在发送数据之前,应将所发送字符串转成gbk编码,因为对于windows系统来说默认是gbk编码
udp接收数据
步骤
- 1、创建套接字
- 代码示例
udp_s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
- 代码示例
- 2、绑定本地窗口
- 代码示例
addr = ('', 49871) # 第一个参数默认本地ip地址 udp_s.bind(addr)
- 代码示例
- 3、接收数据并打印
- 代码示例
data = udp_s.recvfrom(1024) # 1024最大字节 infos, from_addr = data # 拆包,获取数据和用户地址 infos = str(infos, encoding='gbk') # 将接收到的信息转码为gbk print(f"{from_addr}:{infos}") # 打印信息
- 代码示例
- 4、关闭套接字
- 代码示例
udp_s.close()
- 代码示例
完整演示
import socket
def receive():
# 1、创建套接字
udp_s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
# 2、绑定本地端口
addr = ('', 49871) # 第一个参数默认本地ip地址
udp_s.bind(addr)
# 3、接收数据并打印
data = udp_s.recvfrom(1024) # 1024最大字节
infos, from_addr = data # 拆包,获取数据和用户地址
infos = str(infos, encoding='gbk') # 将接收到的信息转码为gbk
print(f"{from_addr}:{infos}") # 打印信息
# 4、关闭套接字
udp_s.close()
if __name__ == '__main__':
receive()
注意: 接收信息之后,将信息转成gbk编码,否则中文显示不正常,因为对于windows系统来说默认是gbk编码
udp聊天器
步骤
- 1.创建套接字 套接字作用于收发数据
- 2.发送数据
- 3.接收数据
- 4.关闭套接字
由于上面给出了发送与接收数据的代码,所以就不一步一步解释了,直接上代码
代码示例
import socket
def sendto(udp_s):
# 发送数据
content = input("请输入要发送的内容:")
# 将字符串转成gbk编码,windows系统默认是gbk编码
content = content.encode('gbk')
udp_s.sendto(content, ('192.168.1.3', 8080))
def receive(udp_s):
# 接收数据并打印
data = udp_s.recvfrom(1024) # 1024最大字节
infos, from_addr = data # 拆包,获取数据和用户地址
infos = str(infos, encoding='gbk') # 将接收到的信息转码为gbk
print(f"{from_addr}:{infos}") # 打印信息
def main():
# 1、创建套接字
udp_s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
# 2、绑定本地端口
addr = ('', 49871) # 第一个参数默认本地ip地址
udp_s.bind(addr)
while True:
# 3、发送数据
sendto(udp_s)
# 4、接收数据
receive(udp_s)
# 5、关闭套接字
udp_s.close()
if __name__ == '__main__':
main()
最后,有喜欢博主写的内容的伙伴可以点赞收藏加关注哦!