【发布时间】:2013-01-24 12:35:07
【问题描述】:
我正在使用 Python 3.3 创建 TCP 客户端和服务器,而且我对同时使用 Python 和套接字是新手。我的问题是我需要能够将通过连接传递的任何内容存储为单独的变量,以便写入各种文件等。
我不确定如何执行此操作,因为这一切似乎都是我无法单独存储的一个数据流。下面是我最新的工作代码,它所做的只是通过连接发送我需要的数据。我是否应该尝试将所有数据作为列表发送并将其解构为单独的变量?我可以单独访问它们而我还没有弄清楚吗?我的方法全错了吗?
服务器代码:
import os
from socket import *
HOST = '' #We are the host
PORT = 29876
ADDR = (HOST, PORT)
BUFFSIZE = 4096
serv = socket( AF_INET,SOCK_STREAM)
serv.bind(ADDR,) #Create tuple with one element
serv.listen(5)
print ('listening...')
conn,addr = serv.accept()
print (conn,addr)
print ('...connected')
with open(os.path.expanduser("~/.ssh/id_rsa.pub")) as f:
key = f.read()
conn.sendall(key)
print(key)
while True:
data = conn.recv(BUFFSIZE)
print(data)
conn.close()
客户端代码:
from socket import *
import os
import socket
HOST = 'xxx.xxx.xxx.xxx'
PORT = 29876 #Must match server.py
ADDR = (HOST,PORT)
BUFFSIZE = 4096
cli = socket.socket( AF_INET, SOCK_STREAM)
cli.connect(ADDR,)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("gmail.com",80))
ip = ((s.getsockname()[0]))
ip = ip.encode('utf-8')
cli.send(ip)
while True:
data = cli.recv(BUFFSIZE)
print (data)
cli.close()
【问题讨论】:
-
它是都是一个流。您将不得不以某种方式将位分开。有像 ZeroMQ 这样的库,它们通过套接字发送单独的消息——你可能想研究一下。
标签: python tcp python-3.x client-server