两台计算机之间使用python套接字进行通信

Gre*_*her 6 python sockets networking

我正在使用这两个程序在我的两台计算机之间进行通信,其中一台是我正在进行的,而且我没有返回任何一方.它只运行而不发送任何东西

客户

import sys
from socket import socket, AF_INET, SOCK_DGRAM

SERVER_IP   = '127.0.0.1'
PORT_NUMBER = 5000
SIZE = 1024
print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER))

mySocket = socket( AF_INET, SOCK_DGRAM )

while True:
        mySocket.sendto('cool',(SERVER_IP,PORT_NUMBER))
sys.exit()
Run Code Online (Sandbox Code Playgroud)

服务器

from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM
import sys
PORT_NUMBER = 5000
SIZE = 1024

hostName = gethostbyname( '0.0.0.0' )

mySocket = socket( AF_INET, SOCK_DGRAM )
mySocket.bind( (hostName, PORT_NUMBER) )

print ("Test server listening on port {0}\n".format(PORT_NUMBER))

while True:
        (data,addr) = mySocket.recvfrom(SIZE)
        print data
sys.ext()
Run Code Online (Sandbox Code Playgroud)

我能做错什么?

小智 14

该程序用于从客户端发送“小写字母字符串”并从服务器获取“大写字母”

服务器端

import socket

def Main():
   
    host = '192.168.0.12' #Server ip
    port = 4000

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host, port))

    print("Server Started")
    while True:
        data, addr = s.recvfrom(1024)
        data = data.decode('utf-8')
        print("Message from: " + str(addr))
        print("From connected user: " + data)
        data = data.upper()
        print("Sending: " + data)
        s.sendto(data.encode('utf-8'), addr)
    c.close()

if __name__=='__main__':
    Main()
Run Code Online (Sandbox Code Playgroud)

客户端

import socket

def Main():

    host='192.168.0.13' #client ip
    port = 4005
    
    server = ('192.168.0.12', 4000)
    
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host,port))
    
    message = input("-> ")
    while message !='q':
        s.sendto(message.encode('utf-8'), server)
        data, addr = s.recvfrom(1024)
        data = data.decode('utf-8')
        print("Received from server: " + data)
        message = input("-> ")
    s.close()

if __name__=='__main__':
    Main()
Run Code Online (Sandbox Code Playgroud)


jdi*_*jdi 8

问题出在您的客户地址:

SERVER_IP   = '127.0.0.1'
Run Code Online (Sandbox Code Playgroud)

您正在连接到本地计算机并发送数据,而您的服务器位于不同的IP上.您需要连接到服务器ip或主机名.

您可以通过首先连接客户端来验证这一点(如果它不能,则会失败)

...

import time

mySocket = socket( AF_INET, SOCK_DGRAM )
mySocket.connect((SERVER_IP,PORT_NUMBER))

while True:
        mySocket.send('cool')
        time.sleep(.5)
Run Code Online (Sandbox Code Playgroud)

从评论更新

因为您使用的是wifi连接,这意味着这两台机器都在本地网络上.您需要找到服务器的LAN IP地址,以将其指定为目标.

命令行方法来查找您的IP

  • OSX/Linux的: ifconfig
  • 视窗: ipconfig /all