Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使服务器和客户端非本地连接?_Python_Multithreading_Sockets - Fatal编程技术网

Python 如何使服务器和客户端非本地连接?

Python 如何使服务器和客户端非本地连接?,python,multithreading,sockets,Python,Multithreading,Sockets,因此,我在Python上创建了一个非常简单的客户机和服务器程序,在本地机器上运行良好 但是如果客户机在另一台机器上,而服务器在另一台机器上。如果服务器和客户端不在同一台机器上,我应该如何修改或在代码中实现什么来连接 smallserver.py import socket as mysoc import threading import time import random # ts server task def server(): # creating ts server socket

因此,我在Python上创建了一个非常简单的客户机和服务器程序,在本地机器上运行良好

但是如果客户机在另一台机器上,而服务器在另一台机器上。如果服务器和客户端不在同一台机器上,我应该如何修改或在代码中实现什么来连接

smallserver.py

import socket as mysoc
import threading
import time
import random

# ts server task

def server():

# creating ts server socket

    global ts

    try:
        ts=mysoc.socket(mysoc.AF_INET, mysoc.SOCK_STREAM)
        print("ts Server socket created")
    except mysoc.error as err:
        print('{} \n'.format("socket open error ",err))

# bind and listen to client

    server_binding=('',50006)
    ts.bind(server_binding)

    ts.listen(1)

# accept client socket connection request


    csockid,addr = ts.accept()
    print ("[ts Server]: Got a connection request from a client at", addr)

# send a intro message to the client.

    msg = "Connected to ts.py server"
    csockid.send(msg.encode('utf-8'))

# receiving and decoding message sent from client

    data_from_client = (csockid.recv(1024))
    word = data_from_client.decode('utf-8').lower()
    print('[Client]: ' + word)

# close the ts server socket

    ts.close()
    exit()

# threading

t1 = threading.Thread(name='server', target = server)
t1.start()
time.sleep(random.random()*5)

exit()

# END OF TS SERVER PROGRAM
smallclient.py

import threading
import socket as mysoc

# client

def client():

# creating 2 different sockets

    global cs

    try:
        cs = mysoc.socket(mysoc.AF_INET, mysoc.SOCK_STREAM)
        print("[Client]: 1st client socket created")
    except mysoc.error as err:
        print('{} \n'.format("socket open error ", err))

# defining ports of both potential servers

    rsListenport = 50006
    sa_sameas_myaddr = mysoc.gethostbyname(mysoc.gethostname())

# connect to the rs server on local machine

    print("[Client] = Connecting to rs server.....")

    server_binding = (sa_sameas_myaddr, rsListenport)
    cs.connect(server_binding)

# printing acknowledgement message from rs server

    data_from_server = cs.recv(100)
    print("[rs Server]: ", data_from_server.decode('utf-8'))

# closing both client sockets

    cs.close()
    exit()

# threading

t2 = threading.Thread(name='client', target=client)
t2.start()

exit()

# END OF CLIENT PROGRAM


您需要绑定到
'0.0.0.0'
,并让客户端以服务器的公共ip为目标。。。服务器还必须向internet公开目标端口(您可以从whatismyip.org或任何其他地方获得公共ip),您需要绑定到
'0.0.0'
,并让客户端以服务器的公共ip为目标。。。服务器还必须向internet公开目标端口(您可以从whatismyip.org或任何其他地方获得公共ip)