簡體   English   中英

通常,每個套接字地址只能使用一種Python

[英]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.

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