Python Socket Server recv () hängtPython

Python-Programme
Anonymous
 Python Socket Server recv () hängt

Post by Anonymous »

Ich möchte einen einfachen Workflow zwischen Server und Client zum Senden und Empfangen einer - derzeit unbekannten Menge an Textdaten: < /p>

Server ausgeführt, hört zu. Teile < /li>
Der Server verwendet ihn, um einige Aufgaben auszuführen. Die Blockierungsversion - und erfuhr den folgenden Code. Ich habe versucht, die Bedingung in z. Passen Sie die doppelten lockigen Zahnspangen am Ende des letzten Chunks an, aber kein Erfolg. Beachten Sie, dass die tatsächlichen Daten länger als das Beispiel sind, daher ist die Übertragung in Stücken unerlässlich. < /P>
Was mache ich falsch? < /P>

Code: Select all

import threading
import socket
import json
import time

class RWF_server:

def start_server(self):

host_address = 'localhost'
port = 9999
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
server.bind((host_address, port))
except OSError:
raise
print(f"Could not bind to {host_address}:{port}, is a server already running here?")
server.listen(5)
print(f"Server listening on {host_address}:{port}")

while True:
conn, addr = server.accept()
print(f'Connected by {addr}')
data = ""
while True:
chunk = conn.recv(1024).decode('utf-8')
print('Server got:', chunk)
if not chunk:
break
data += chunk
if not data:
continue  # Continue to the next connection if no data was received
message = json.loads(data)
print(f'Received full message: {message}, getting to work')

# Simulate processing
time.sleep(3)
print('Task is done')

response = {'status': 'success', 'message': 'Data received'}
response_data = json.dumps(response)
conn.sendall(response_data.encode('utf-8'))
conn.close()

class RWF_client:

def start_client(self):

content = {2: 'path_to_a_file\\__batch_B3310.bat',
'data': {'FY_phase': 0.0,
'MY_phase': 0.0,
'head_chamfer_legth': 0.1,
'head_radius': 2900.0,
'head_thickness': 13.0,
'head_thickness_at_nozzle': 13.0, }}

print('The following content is sent to the server: {}'.format(content))

with socket.socket() as sock:
try:
sock.connect(('localhost', 9999))
except (ConnectionRefusedError, TimeoutError):
raise

sock.sendall(json.dumps(content).encode('utf-8'))
print('Content sent to the server')

response = ""
while True:
chunk = sock.recv(1024).decode('utf-8')
print('Client getting response: {}'.format(chunk))
if not chunk:
break
response += chunk

print(f'Received response: {json.loads(response)}')

response = json.loads(response)

return response

server_thread = threading.Thread(target=RWF_server().start_server)
server_thread.start()

client_thread = threading.Thread(target=RWF_client().start_client)
client_thread.start()

server_thread.join()
client_thread.join()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post