私はCMDを開き、とのTelnet接続の作成:telnetサーバーから一度に複数の文字を受信するにはどうすればよいですか?
telnet localhost 5555
をそして、あなたは
下の画像で見ることができるような接続は、サーバ印刷「ようこそ」と開きます。しかし、私がtelnetウィンドウに入力すると、完全な文章ではなく、一度に1文字ずつ返信します(たとえば、私はhelloと入力し、一度にhello worldを送信します)。
SERVEROUTPUT:時間SERVEROUTPUT:EのSERVEROUTPUT:L serveroutputを:L serveroutputを:
oを私はそれが完全な単語ハローというか一度に一つの文字を送信するよりも、完全な文を送りたいです。
どうすればいいですか?
は、ここでは、コードです:コメントで示唆したように
import socket
import sys
from _thread import *
host = ''
port = 5555
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.bind((host, port))
except socket.error as e:
print(str(e))
s.listen(1)
def threaded_client(conn):
conn.send(str.encode('Welcome, type your info\n'))
while True:
print("Waiting for input")
data = conn.recv(1024)
print("Data: ", data)
reply = 'Server output: ' + data.decode('utf-8')
if not data:
break
conn.sendall(str.encode(reply))
conn.close()
while True:
conn, addr = s.accept()
print('connected to: '+addr[0]+':'+str(addr[1]))
start_new_thread(threaded_client, (conn,))
おかげ
私は一度に1つのチャットを送信すると思いますが、これについてできることはあまりありません。これを許可する別のTelnetクローンを使用するか、Python側でバッファを使用し、行を分析するために '\ n'文字を待つことができます。 – piertoni
私はあなたのtelnetクライアントを設定すべきだと思います。しかし、TCP(SOCK_STREAMで参照される)は "message"という概念を持たないため、信頼できる解決策にはなりません。接続はバイトのストリームなので、クライアントとサーバーはそれを喜んで行います。ただし、改行文字を検出してメッセージ境界として扱うことはできます。 – yeputons
私は混乱しています。 telnetクライアントを使用して、私たちに示したプログラムと話をしますか?それは言及することが重要です。あなたがそうでない時にあなたが普通のtelnetサーバーと話していることを示唆するのはちょっと混乱します。 Telnetは、入力するとすぐに文字を送信する傾向があり、Telnetサーバーは、入力した内容を確認する方法であるため、直ちに応答します。エコーする前に行全体が受信されるまで待つようにプログラムを変更することはできますが、telnetクライアントで入力した人は何を書き込むのか分かりません。 – tdelaney