socket 이상

1767 단어 이상 처리socket
다음 코드는 모든 이상을 포획하는 방법을 보여 줍니다.이 예는 연결할 호스트 이름, 서버의 포트 번호나 이름, 가져올 파일 이름 세 개의 명령줄 인자가 필요합니다.프로그램이 서버에 연결되어 요청한 파일의 이름에 대한 HTTP 요청을 보내서 결과를 표시합니다.
다음 코드는 직접 실행할 수 없습니다.sys.argv[1]에서 특정 서버 이름,sys로 변경.argv[2]에서 특정 포트 번호,sys로 변경.argv[3] 특정 파일 이름으로 바꾸어 테스트
PS:sys.argv[]는 명령행 매개 변수를 가져오는 데 사용되는sys.argv[0]는 코드 자체의 파일 경로를 표시하기 때문에 매개 변수는 1부터 시작합니다.
이 프로그램에서 이상 처리는 단지 우호적인 정보를 간단하게 출력하고 실행을 중지할 뿐이다.그것은 이 예에서 발생할 수 있는 모든 네트워크와 관련된 이상을 포착한다.Python의 socket 모듈은 실제로 다음과 같은 4가지 예외를 정의합니다.
socket.error는 일반적인 IO 및 통신 문제와 관련이 있습니다.
socket.gaierror 주소 정보 조회와 관련된
scoket.herror 다른 주소 오류와 관련된
scoket.timeout이 socket에서 settimeout () 를 호출한 후 시간 초과와 관련된
import socket, sys


host = sys.argv[1]
textport = sys.argv[2]
filename = sys.argv[3]


try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, e:
    print "Strange error creating socket: %s" %e
    sys.exit(1)


try:
    port = int(textport)
except ValueError:
    try:
        port = socket.getservbyname(textport, 'tcp')
    except socket.error, e:
        print "Couldn`t find your port: %s" %e
        sys.exit(1)


try:
    s.connext((host, port))
except socket.gaierror, e:
    print "Address-related error connecting to server: %s" %e
    sys.exit(1)
except scoket.error, e:
    print "Connection error: %s" %e
    sys.exit(1)


try:
    s.sendall("GET %s HTTP/1.0\r
\r
" %filename) except scoket.error, e: print "Error sending data: %s" %e sys.exit(1) while 1: try: buf = s.recv(2048) except socket.error, e: print "Error receiving data: %s" %e sys.exit(1) if not len(buf): break sys.stdout.write(buf)

좋은 웹페이지 즐겨찾기