我有一个使用套接字的Python基本客户机-服务器脚本。服务器绑定到特定端口并等待客户端连接。当客户机连接时,它们会收到一个原始的“输入”提示符,该提示符将输入的命令发送到服务器上的子程序,并通过管道将输出返回给客户机。
有时当我从客户机执行命令时,输出将挂起,直到我按[enter]键时才会显示原始输入提示。
一开始我认为这可能是一个缓冲区问题,但当我使用输出较小的命令时,就会发生这种情况,比如“clear”或“ls”等等
客户代码:import os, sys
import socket
from base64 import *
import time
try:
HOST = sys.argv[1]
PORT = int(sys.argv[2])
except IndexError:
print("You must specify a host IP address and port number!")
print("usage: ./handler_client.py 192.168.1.4 4444")
sys.exit()
socksize = 4096
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
server.connect((HOST, PORT))
print("[+] Connection established!")
print("[+] Type ':help' to view commands.")
except:
print("[!] Connection error!")
sys.exit(2)
while True:
data = server.recv(socksize)
cmd = raw_input(data)
server.sendall(str(cmd))
server.close()
服务器代码:
^{pr2}$