0

私は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を使用しています。この問題に関するヘルプは、大歓迎です。

4

1 に答える 1

2

os.system()はプロセスの出力を返しませんが、戻り値(つまり、整数0)を返します。

ファイルを読み取るだけの場合は、手動で行います。

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

プロセス出力が必要な場合は、サブプロセスモジュールのドキュメントをお読みください。

于 2013-02-07T16:44:32.217 に答える