簡體   English   中英

python連接到同一網絡上的服務器

[英]python connect to server on same network

我有一個 server.py 和一個 client.py。

如果我使用與 127.0.0.1 相同的端口和主機在同一台計算機上運行它們,則它工作正常。

我將另一台筆記本電腦連接到同一網絡。 我得到了我的本地 IP 地址 129.94.209.9 並將其用於服務器。 在另一台筆記本電腦上,我嘗試連接到服務器,但無法連接。

這是我的代碼、網絡的問題還是我只是使用了錯誤的 IP 地址?

服務器.py

HOST = '129.94.209.9' 
PORT = 9999
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))
server_socket.listen(10)
sockfd, addr = server_socket.accept()
send and receive messages etc....

客戶端.py

HOST = '129.94.209.9'
PORT = 9999
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    sock.connect((HOST, PORT))
except:
    print("Cannot connect to the server")
send and receive messages etc...

客戶端打印“無法連接到服務器”

謝謝!!

更新:感謝您的評論

1) 我確實做了 sockfd, addr = server_socket.accept() 對不起,我忘了添加它,它在代碼的后面幾行。

2)錯誤為:[Errno 11] 資源暫時不可用

3)Ping確實有效

編輯:當我通過以太網電纜將兩台計算機插入同一個網絡時,它現在正在工作。 不知道為什么當它們彼此相鄰並連接到 wifi 時我的無法工作。 感謝所有的建議! 我會自己調查網絡問題

使用以下代碼(當然是我的 IP 地址而不是您的 IP 地址),我看到了預期的行為。

so8srv.py:

import socket
HOST = '192.168.33.64' 
PORT = 9999
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))
server_socket.listen(10)
print("Listening")
s = server_socket.accept()
print("Connected")

so8cli.py:

import socket
HOST = '192.168.33.64'
PORT = 9999
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    sock.connect((HOST, PORT))
except Exception as e:
    print("Cannot connect to the server:", e)
print("Connected")

當我運行它時,服務器打印"Listening" 當我然后運行客戶端時,它和服務器都打印"Connected"

您會注意到,與您的代碼不同,我的客戶端不只是為引發的任何異常打印相同的診斷信息,而是報告異常。 作為一個合理的做法,您應該避免使用裸露的except子句,因為無論異常是由編程錯誤還是由諸如KeyboardInterrupt類的用戶操作引起,您的程序都會采取相同的操作。

也可以嘗試使用這種結構來獲取 IP 地址:

HOST=socket.gethostbyname(socket.gethostname())

暫無
暫無

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

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