无法使用Python在套接字上发送正确的值

时间:2013-02-07 16:08:08

标签: python sockets tcp client-server python-3.3

我是新手一般使用Python和套接字(仅在昨天开始)所以我在尝试设置TCP客户端和服务器时遇到了很多问题。我遇到的问题是我想从服务器向客户端发送密钥。我知道服务器正确地抓取密钥,因为它打印出正确的密钥,但它在新行中附加了0,当密钥发送到客户端时,唯一显示的是“b'0” ”

由于我缺乏经验,我的进展很少,经过几个小时的搜索,我仍然没有找到解决问题的方法。

这是服务器代码:

import os
from socket import * #import the socket library


HOST = '' #We are the host
PORT = 29876
ADDR = (HOST, PORT)
BUFFSIZE = 4096
message = 'Hello, World!'


serv =  socket( AF_INET,SOCK_STREAM)
serv.bind(ADDR,) 
serv.listen(5) 
print ('listening...')


conn,addr = serv.accept()
print (conn,addr)
print ('...connected')


key = os.system("cat ~/.ssh/id_rsa.pub")
conn.send(str(key))
print (key)


conn.close()

这是客户端代码

from socket import *
import os

HOST = 'xxx.xxx.xxx.xxx'
PORT = 29876 
ADDR = (HOST,PORT)
BUFFSIZE = 4096
message = "Hello, World!"

cli = socket( AF_INET, SOCK_STREAM)
cli.connect(ADDR,)

data = cli.recv(BUFFSIZE)
print (data)

cli.close()

从我的代码可以看出我使用的是Python 3.3 非常感谢您对此问题的任何帮助。

1 个答案:

答案 0 :(得分:2)

os.system()不返回进程的输出,而是返回值(即整数0)。

如果您只想阅读文件,请手动执行:

with open(os.path.expanduser("~/.ssh/id_rsa.pub")) as f:
    key = f.read()
    conn.sendall(key)

如果您需要流程输出,请阅读subprocess module

的文档