使用python套接字在连接到同一wifi的不同计算机中的服务器和客户端之间聊天

使用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

当我在wifi上扩展一个简单的聊天程序时,我遇到了一些问题。 我把运行在不同系统上的两个程序命名为客户机和服务器,认为它们不能执行其典型功能。 客户端发送的消息由服务器程序正确显示,但一旦服务器发送消息,客户端程序就无法接收。我检查了IP,一切正常。客户端和服务器代码也很相似,唯一的区别在于谁先发送消息(根据我的程序,客户端)。 我需要尽快的帮助。 提前谢谢

这是我的客户程序

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)
见: