python3 중 Socket 학습

1985 단어 socketpython3
요즘은 실험하느라 바빠서 가끔은 오랫동안 접하지 못했던 Socket을 연습할 기회가 있습니다. 예전에 공부할 때마다.Net 아래에 있지만 모든 Socket 원리는 똑같습니다. 자신의 코드를 첨부합니다. (인터넷down의, 자체 디버깅)
서버 측:
# -*- coding: cp936 -*-
##tcp , , ip , 'I get it!' , 。
##@ 
import socket,traceback
host=''
port=12345
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((host,port))
s.listen(1)
while 1:
    try:
        clientsock,clientaddr=s.accept()
    except KeyboardInterrupt:
        raise
    except:
        traceback.print_exc()
        continue
    try:
        print(" :",clientsock.getpeername())
        while 1:
            data=clientsock.recv(4096).decode()
            if not len(data):
                break
            print(clientsock.getpeername()[0]+':'+str(data))
            clientsock.sendall(data.encode())
            clientsock.sendall(("
I get it!
").encode()) t=input('input the word:') clientsock.sendall(t.encode()) except (KeyboardInterrupt,SystemExit): raise except: traceback.print_exc() try: clientsock.close() except KeyboardInterrupt: raise except: traceback.print_exc()

클라이언트:
import socket,sys
port=12345
host=input(' ip:')
data=input(' :')
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
    s.connect((host,port))
except:
    print(' !')
s.send(data.encode())
s.shutdown(1)
print(' 。')
while 1:
    buf=s.recv(4096).decode()
    if not len(buf):
        break
    sys.stdout.write(buf)

이제 몇 가지 사소한 문제에 대해 이야기해 봅시다.
1. 다른 컴파일 환경과 마찬가지로 서버와 클라이언트를 각각 실행하는 두 개의 프로세스가 필요합니다. 즉, 두 개의 셸 스크립트를 열 수 있습니다.
2. 인코딩 방식의 문제.Socket은 모두byte 인코딩 방식을 사용하고 Python3은 유니코드 인코딩 방식을 사용하기 때문에 decode와 encode 함수 변환을 사용해야 합니다
3. 이 예는 함수 작용을 소개하는 기초적인 예일 뿐이므로 실제로 사용할 때 반드시 기능 확장을 하고 대상을 향한 부분을 추가해야 한다.

좋은 웹페이지 즐겨찾기