使用python套接字在连接到同一wifi的不同计算机中的服务器和客户端之间聊天
当我在wifi上扩展一个简单的聊天程序时,我遇到了一些问题。 我把运行在不同系统上的两个程序命名为客户机和服务器,认为它们不能执行其典型功能。 客户端发送的消息由服务器程序正确显示,但一旦服务器发送消息,客户端程序就无法接收。我检查了IP,一切正常。客户端和服务器代码也很相似,唯一的区别在于谁先发送消息(根据我的程序,客户端)。 我需要尽快的帮助。 提前谢谢 这是我的客户程序使用python套接字在连接到同一wifi的不同计算机中的服务器和客户端之间聊天,python,sockets,networking,wifi,send,Python,Sockets,Networking,Wifi,Send,当我在wifi上扩展一个简单的聊天程序时,我遇到了一些问题。 我把运行在不同系统上的两个程序命名为客户机和服务器,认为它们不能执行其典型功能。 客户端发送的消息由服务器程序正确显示,但一旦服务器发送消息,客户端程序就无法接收。我检查了IP,一切正常。客户端和服务器代码也很相似,唯一的区别在于谁先发送消息(根据我的程序,客户端)。 我需要尽快的帮助。 提前谢谢 这是我的客户程序 from socket import * import sys import time TO_ADDR=('192.16
from socket import *
import sys
import time
TO_ADDR=('192.168.1.101',8135)
hostname=gethostbyname('0.0.0.0')
LOCAL_ADDR=(hostname,8138)
MSG_LEN=1000
fd=socket(AF_INET, SOCK_DGRAM)
fd.bind(LOCAL_ADDR)
s=('',)
msg=''
def recv():
s=fd.recvfrom(MSG_LEN)
print '\n',s[0]
print '\n'
return s[0]
def send(msg):
fd.connect(('192.168.1.101',8135))
fd.sendto(msg,TO_ADDR)
while msg!='stop' or s!='stop':
print '\n'
msg=raw_input('Enter your message:')
send(msg)
s=recv()
print '\n',s[0]
这是我的服务器程序
from socket import *
s=('',)
msg=''
TO_ADDR=('198.168.1.103',8138)
hostname=gethostbyname('0.0.0.0')
LOCAL_ADDR=(hostname,8135)
MSG_LEN=1000
fd=socket(AF_INET,SOCK_DGRAM)
fd.bind(LOCAL_ADDR)
def recv():
s=fd.recvfrom(MSG_LEN)
print '\n',s[0]
print '\n'
return s[0]
def send(msg):
fd.connect(('198.168.1.103',8138))
fd.sendto(msg,TO_ADDR)
fd.close()
while s[0]!='stop' or msg!='stop':
s=recv()
msg=raw_input('Enter your message:')
send(msg)
UDP(您正在使用的是SOCK_DGRAM
)是一种无状态协议。因此,您不能像在代码中尝试做的那样从服务器“连接”到客户机
见:
你必须这样做:
data, addr = fd.recvfrom(1024)
fd.sendto(data, addr)
您可以将recv()
函数更改为:
def recv():
data, addr = fd.recvfrom(MSG_LEN)
print '\n',s[0]
print '\n'
return data, addr
def send(msg, addr):
fd.sendto(msg, addr)
将您的send()
函数发送到:
def recv():
data, addr = fd.recvfrom(MSG_LEN)
print '\n',s[0]
print '\n'
return data, addr
def send(msg, addr):
fd.sendto(msg, addr)
代码的最后一部分是:
while s[0]!='stop' or msg!='stop':
data, addr = recv()
msg = raw_input('Enter your message:')
send(msg, addr)
见: