【发布时间】:2014-01-07 22:46:44
【问题描述】:
我一直在处理一个项目,该项目涉及将信息发送到公共服务器(以演示密钥交换方案的工作原理),然后将其发送到特定客户端。只有两个客户。
我希望在如何将信息从客户端 (1) 获取到服务器的正确方向上得到推动,然后让服务器将该信息重定向到客户端 (2)。我对代码有些混乱,对如何从服务器发送和接收信息感到满意,但我不知道(到目前为止大约 2 小时的研究)如何区分客户端并将信息发送给特定客户端 我当前的服务器代码(与python3 docs 几乎没有变化:
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
"""
The RequestHandler class for our server.
It is instantiated once per connection to the server, and must
override the handle() method to implement communication to the
client.
"""
def handle(self):
# self.request is the TCP socket connected to the client
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0]))
print(self.data)
# just send back the same data, but upper-cased
self.request.sendall(self.data.upper())
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
# Create the server, binding to localhost on port 9999
server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
我的客户端代码(与python3 docs 几乎没有变化:
import socket
import time
data = "matt is ok"
def contactserver(data):
HOST, PORT = "localhost", 9999
# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect to server and send data
sock.connect((HOST, PORT))
sock.sendall(bytes(data, "utf-8"))
# Receive data from the server and shut down
received = str(sock.recv(1024), "utf-8")
print("Sent: {}".format(data))
print("Received: {}".format(received))
return format(received)
while True:
k = contactserver('banana')
time.sleep(1)
print(k)
【问题讨论】:
-
然后呢?您已经很好地粘贴了与文档几乎没有变化的代码。您对该代码有疑问吗?
-
@abarnert 我希望在如何从客户端(1)获取信息到服务器的正确方向上得到推动,然后让服务器将该信息重定向到客户端(2)。我对代码有些混乱,对如何从服务器发送和接收信息感到满意,但我不知道(到目前为止大约 2 小时的研究)如何区分客户端并将信息发送给特定客户端。
-
socketserver真的不应该以这种方式使用 - 它保持简单以使其更易于学习,并使the source 易于理解,作为更复杂项目的示例代码.有一些框架可以帮助您进行客户端间通信,但socketserver不是其中之一。话虽这么说,你想要的是可行的,正如我在回答中解释的那样......但如果你想变得更复杂,你可能想要超越socketserver。
标签: python sockets client communication