所以我写了这个服务器脚本,该脚本应该接收用户名,然后继续执行其他代码。但是我遇到了这个错误:
“ OSError:[WinError 10057]不允许发送或接收数据的请求,因为未连接套接字,并且(当使用sendto调用在数据报套接字上发送时)未提供地址”
我的理论是服务器和客户端未同步,因此服务器认为它没有收到消息。如何改善我的代码,以便服务器实际收到消息? (我尝试过尝试块)
我的代码:
import socket
port = int(input("Server port: "))
try:
socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socket.bind(("localhost",port))
socket.listen(1)
except Exception:
print("error while starting server")
input()
exit()
def receive(con,buffer):
return str(con.recv(buffer).decode())
while True:
con,ip = socket.accept()
print(str(ip) + " Connected!")
username = receive(socket,1024) # <-- error
#other code
socket.close()
客户代码:
import socket
ip = input("Server IP: ")
port = int(input("Server port: "))
socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
socket.connect((ip,port))
except Exception:
print("Error while connectine to the server!")
input()
exit()
def send(s,msg):
s.send(bytes(msg,"utf-8"))
username = input("Username: ")
send(socket,username)
# other code
socket.close()
答案 0 :(得分:0)
您不应使用类似于任何库名的变量名。在您的情况下,您已使用变量socket
来存储服务器套接字对象。因此,您的代码很含糊,因为您使用了同名的库。
下面是工作代码。
import socket
port = int(input("Server port: "))
try:
SERVER = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
SERVER.bind(("localhost",port))
SERVER.listen(1)
except Exception:
print("error while starting server")
input()
exit()
def receive(con,buffer):
return str(con.recv(buffer).decode())
while True:
con,ip = SERVER.accept()
print(str(ip) + " Connected!")
username = receive(con,1024) # <-- error
#other code
socket.close()