簡體   English   中英

使用python套接字在連接到同一wifi的不同計算機上的服務器和客戶端之間進行聊天

[英]chat between server and a client in different computers connected to the same wifi using python sockets

我正在努力通過wifi擴展一個簡單的聊天程序時,iam遇到了一些問題。 我已經將運行在不同系統上的這兩個程序命名為客戶端和服務器,因為它們認為它們無法執行其典型功能。 客戶端發送的消息由服務器程序正確顯示,但服務器發送消息后,客戶端程序未接收到該消息。檢查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 )是一種無狀態協議。 因此,您無法像嘗試在代碼中那樣從服務器“連接”到客戶端。

請參閱: UDP通信

您必須執行以下操作:

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

您的send()函數可以:

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)

看到:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM