所以我写了这个服务器脚本,它应该接收一个用户名,然后继续其他一些代码。但是我收到了这个错误:
"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()
您不应该使用类似于任何库名称的变量名。在本例中,您使用了变量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()
我一直在开发一个简单的python套接字聊天室,客户端和服务器可以在其中相互发送消息。我遇到的问题是服务器和客户端一次只能发送一条消息。我希望它能像任何其他聊天室一样工作,在那里我可以在发送消息时收到消息,任何帮助都会有很大帮助
我在询问之前搜索了这个问题,但我找不到类似的东西。我开发了一个客户端/服务器解决方案来发送/接收HL7消息。我使用套接字将客户端连接到服务器,从这个连接中,我只能使用OutputSteam对象发送1条HL7消息。我如何在同一个套接字连接中发送多个HL7?我尝试了不同的方法,但它们不能正常工作。 以下是我的客户端代码: 从服务器端 如何在同一套接字连接中发送更多HL7消息?
问题内容: 我正在尝试为python中的类编写单元测试。该类在 init 上打开一个tcp套接字。我试图对此进行模拟,以便可以断言使用正确的值调用了连接,但是显然在单元测试中实际上并未发生。我已经厌倦了MagicMock,补丁程序等,但是还没有找到解决方案。 到目前为止我的班级看起来像 问题答案: 如果您只想断言被正确调用,这很简单 如果必须先导入模块才能访问,则需要稍微调整补丁:
我有一个数组类型的。我必须在python中通过流/TCP套接字发送它。然后我必须在接收端接收相同的阵列。
我有这个遗留的伪代码: 我的问题是关于嵌套块。 据我了解,在这种情况下提到的块是多余的,就好像两个线程同时调用 那么一次只有一个线程可以访问私有字段。因此,代码可以简化为 有可能进一步消除racy读取到 所以我的问题是,这种重构在同步和JMM方面是否正确,如果正确(或者不正确)-是否有基于JCStress的测试证明了这一点?