下面的代碼是一個簡單的聊天客戶端。我用netcat -l 8000
啓動本地tcp服務器,然後通過運行下面的腳本與它連接。首先取決於我是否start
t1
或t2
。我可以從服務器讀取或不讀取。我還注意到,在打印語句中,我似乎從使用sys.readline和輸入函數的終端讀取空信息。爲什麼python輸入函數返回空字符串而不是等待用戶輸入?
我也試過用線程代替進程,結果是一樣的。
編輯:根據@ paulsm4給出的迴應,我用ncat代替netcat作爲我的服務器。這導致了一些瘋狂的事情發生。如果我使用ncat -k -l -m 100 8000
而不是netcat/nc並用Thread
替換Process
。代碼正常工作。但是當我使用Process
時,代碼崩潰了。
import sys
import socket
from multiprocessing import Process
from time import sleep
def connect(host, port):
s = socket.socket()
s.connect((host, port))
return s
def send_message(host, port):
s = connect(host, port)
while True:
sleep(1)
message = None
try:
message = input('> ')
except EOFError:
print("try failed")
pass
print('message is ', message)
if message:
val = s.send(message.encode('utf8'))
print('message sent')
def receive(host, port):
s = connect(host, port)
while True:
sleep(1)
message = s.recv(1024).decode('utf8')
print('\n', message)
def main(host, port):
t1 = Process(target=send_message, args=(host, port))
t2 = Process(target=receive, args=(host, port))
t1.start()
t2.start()
t1.join()
t2.join()
if __name__ == '__main__':
host, port = sys.argv[1], int(sys.argv[2])
main(host, port)
啊是的!愚蠢的問題。 netcat和nc默認只監聽一個連接。感謝您指點我正確的方向! –