소켓을 사용하여 통신하는 인터페이스에서 작업하고 있습니다. 나는 동시에 데이터를주고 받는데 쓰레드를 사용해야한다.키보드 인터럽트, 소켓 및 스레드
아래 코드는 지속적으로 데이터를 보내는 모듈의 축소 버전입니다.
제 문제는 개발 중에 자주 시작하고 중지해야하지만 스레드가 일반 스크립트처럼 응용 프로그램을 중지하는 것이 불가능 해 보입니다. 다시 시작하려면 프로세스 관리자에서 프로세스를 종료해야합니다.
나는 뭔가를 오해하고 있다는 느낌이 들었습니다.
나는 주변을 둘러 보았으나 아무런 도움이되지 않도록 일관성없는 답변을 많이 보았습니다. KeyboardInterrupt 예외 처리 시도했는데 작동하지 않습니다.
아이디어가 있으십니까?
import socket
import sys
import threading
running = True
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 50000)
print ('connecting to %s port %s' % server_address)
sock.connect(server_address)
class TelemetryPacket:
state = "N/A"
def __init__(self, stringvalue):
self.state = stringvalue
def serialise(self):
return "%s" % (self.state)
def send(running):
try:
while (running):
telemetry = TelemetryPacket(0).serialise()
sock.sendto(telemetry.encode('utf-8'), server_address)
except KeyboardInterrupt:
print ("threads successfully closed")
running = False
def recv(running):
try:
while (running):
data = sock.recv(1)
if (data):
print("data received: %s" % data)
except KeyboardInterrupt:
print ("threads successfully closed")
running = False
a = threading.Thread(target=send, args=(running,))
a.start()
b = threading.Thread(target=recv, args=(running,))
b.start()
'양말 = socket.socket (socket.AF_INET, socket.SOCK_STREAM)'와 ** 내가하기 위해 스레드를 사용해야합니다 동일한 시간에 데이터를주고받습니다. ** 먼저 소켓 라이브러리에 대해 배웁니다. TCP 연결을 사용하여 실시간 응용 프로그램을 작성할 수 없습니다! – dsgdfg
@dsgdfg 당신은 좋은 지적을합니다. 한 가지 유형의 "소켓"이 있다고 가정 했으므로이 라이브러리는 실제로 생각하지 않고 모든 UDP라고 가정했습니다. 이것은 프로토 타입 일 뿐이므로 이제는 문제가 없습니다. 나중에 적절한 해결책을 찾아 볼 것입니다. 고마워요! – Gordon13