鱼cpython学习者 发表于 2022-7-1 13:40:14

socket绑定本机所有ip

想用socket做一个局域网内文件传输,A电脑connectB电脑,B电脑bind自己IP。但有时候B电脑会有多个ip,A电脑程序connect的是其中一个,B电脑程序bind的是另一个,导致接收不到数据。
网上说bind(0.0.0.0),还是接收不到数据
目前的思路:
python获取本机所有ip并绑定(感觉希望较大)
python扫描局域网内所有ip并放到gui界面限制用户输入

大佬有没有什么好的思路?
A电脑程序:
import socket


def send_file():
    filename = 'a.txt'
    udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    addr = ('192.168.3.12', 7788) # B电脑其中一个ip
    with open(filename, 'r') as f:
      data = f.read()
    data = f'{filename}///{data}'
    udp.sendto(data.encode('utf-8'), addr)
    udp.close()
B电脑:
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
local_addr = ('192.168.112.2', 7788) # B电脑另一个ip
udp_socket.bind(local_addr)
while True:
    data_undecoded, addr = udp_socket.recvfrom(1024 * 1024 * 1024)
    filename, data = data_undecoded.decode('utf-8').split('///')
    with open(filename, 'w') as f:
      f.write(data)

我想能不能两个电脑自动约定好bind的ip,这样最方便。但如果不行,那只能两人约定ip再来改程序,凑合一下吧

ba21 发表于 2022-7-1 19:14:20

一个程序开多个线程同时工作不就行了。

suchocolate 发表于 2022-7-2 15:58:46

s.bind(('0.0.0.0', port))
4个0代表所有
页: [1]
查看完整版本: socket绑定本机所有ip