[英]Python server “Only one usage of each socket address is normally permitted”
[英]Only one usage of each socket address is normally permitted Python
我寫了一個基本程序來創建帶有服務器和客戶端的套接字。 但是問題是,當我運行代碼時,它給我一個錯誤,指出通常只允許每個套接字地址使用一種。 因此,我認為問題是由於端口引起的,我更改了端口,但仍然無法正常工作。 我該如何工作?
這是我的代碼:
服務器
import socket
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(('localhost',3200))
sock.listen(1)
print "Server is ready to receive data..."
client, address = sock.accept()
msg = client.recv(1024)
print msg
客戶
import socket
connection_to_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connection_to_server.bind(('localhost',3200))
msg = raw_input("Please enter a content :")
connection_to_server.send(msg)
謝謝你的幫助 !
我認為對於套接字在這里的工作方式存在根本的誤解。
socket.bind()
調用用於綁定到特定接口上的特定端口,該對使用網絡地址指定(綁定到127.0.0.1)
上的端口8080
127.0.0.1)
。 您需要先在服務器端執行此操作,然后才能開始讀取傳入的數據,即在特定套接字上“偵聽”。 僅服務器需要執行此操作。 然后,客戶端將使用socket.connect
連接到此套接字。
正如頻譜在注釋中指出的那樣,當您需要通過特定的接口/端口組合進行通信時,綁定是必不可少的,這對於服務器幾乎總是必需的,但對於客戶機卻並非總是如此。 客戶端和服務器不能同時訪問/綁定到同一接口上的同一端口,這樣做沒有任何意義。
您的客戶端和服務器都嘗試在同一套接字上開始偵聽,這是錯誤消息所建議的,不允許的。
在繼續之前,您應該閱讀《 套接字編程指南》 。
而不是
> connection_to_server.bind(('localhost',3200))
你應該有
connection_to_server.connect(('localhost',3200))
對於SOCK_STREAM套接字,您的客戶端應該連接而不是綁定。 從套接字HOWTO :
import socket
connection_to_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connection_to_server.connect(('localhost',3200))
msg = raw_input("Please enter a content :")
connection_to_server.send(msg)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.