2012-04-29 2 views
0

소켓을 사용하여 파이썬에서 클라이언트/서버 소프트웨어를 프로그래밍 중입니다.소켓 파이썬 연결

나는 특히 TCP/IP 및 소켓 모델, 질문이 있습니다 : 내 서버 측에서이 코드 예제를 사용하고

(파이썬에서 서버 측 프로그램) :

import socket 
# Create a TCP/IP socket 
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# Prevent from "address already in use" 
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 

# Bind the socket to port 
server_address = ("localhost", 5000) 
server.bind(server_address) 

# Listen for connections 
server.listen(5) 

# Wait for on incomming connection 
read = connection.recv(1024) 
print "Received: ",read 

모든 괜찮습니다, 하지만 난 어떤 개념 질문이 있습니다

1) 방법 ENAB을위한 가장 좋은 방법입니다 르이 comunication ?? CLIENT와 SERVER 프로그램 간의 TCP/IP 하트 비트 트래픽을 설정해야합니까 ?? 나는 심지어 내가 다시 돌아와 메시지를 보내고 다른 메시지 (연결을 설정 한 후 분과 분이 많이)를 보낼 때 서버가 트래픽이없는 클라이언트 프로그램을 유휴 상태로 유지한다는 것을 알았다. 정상적인 행동입니까?

2) TCP/IP 스택 또는 심지어 "소켓 모듈"에는 모든 종류의 TIMEOUT 기능이 있습니다. 누가 파이썬에서 소켓 모듈을 사용하여 "타임 아웃"연결을 잃어 버릴 수 있습니까?

모두를위한 Tks!

답변

2

TCP에서 연결을 유지하려면 하트 비트가 필요하지 않습니다. 두 엔드 포인트가 여전히 건강한 한 연결은 지속됩니다.

그러나 하트 비트는 오류를 일찍 발견하는 데 유용 할 수 있습니다. 그렇지 않으면 연결이 아직 살아 있는지 여부 만 알면 데이터를 보내려고하거나 다른 쪽에서 데이터를 보내려고합니다. 대부분의 경우이 정도면 충분합니다. 그러나 일부 (IRC 응용 프로그램과 같은) 사용자는 클라이언트가 다운 된 직후에 알고 싶어하므로 다른 사람들에게 채널에서 제거되었다는 것을 알릴 수 있습니다.

SO_KEEPALIVE 소켓 옵션을 사용하여 자동으로 하트 비트 패킷을 보낼 수는 있지만 경험이 없습니다. This question이 도움이 될 수 있습니다.

시간 초과가 발생하면 SO_RCVTIMEOSO_SNDTIMEO 소켓 옵션을 사용하십시오. 자세한 내용은 man 7 socketPython socket documentation을 참조하십시오.

+0

Tks Thomas, TCP/IP 모델이 하트 비트 트래픽을 생성하지 않습니까? 끝점에 연결되어있는 동안 연결은 계속 열려 있습니다. – StarkBR

+0

관련 질문에 대한 링크로 업데이트되었습니다. – Thomas