이 기사는 Python에서 소켓을 통한 TCP 통신 구현에 대한 소개를 제공합니다(예제 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
TCP
TCP(전송 제어 프로토콜)는 IETF의 RFC 793에 의해 정의된 연결 지향적이고 안정적인 바이트 스트림 기반 전송 계층 통신 프로토콜입니다. 컴퓨터 네트워크의 단순화된 OSI 모델에서는 네 번째 계층 전송 계층에서 지정한 기능을 완성합니다. UDP(사용자 데이터그램 프로토콜)는 동일한 계층 내의 또 다른 중요한 전송 프로토콜입니다[1]. 인터넷 프로토콜 제품군에서 TCP 계층은 IP 계층 위와 애플리케이션 계층 아래에 위치한 중간 계층입니다. 서로 다른 호스트의 애플리케이션 계층 간에는 안정적인 파이프형 연결이 필요한 경우가 많지만 IP 계층은 이러한 흐름 메커니즘을 제공하지 않고 신뢰할 수 없는 패킷 전환을 제공합니다.
다음은 TCP 통신을 구현하는 소켓의 개략도입니다. 우리는 개략도에 따라 프로그램을 작성합니다
TCP 서버
서버 프로세스는 먼저 포트를 바인딩하고 다른 포트의 연결을 수신해야 합니다. 클라이언트. 클라이언트가 연결되면 서버는 클라이언트와 소켓 연결을 설정하고 후속 통신은 이 소켓 연결에 의존합니다.
클라이언트 연결을 수신하고 클라이언트의 요청에 응답하는 간단한 서버 프로그램을 작성해 보겠습니다.
import socket server = socket.socket() server.bind(('192.168.1.165',8900)) #调用 listen() 方法开始监听端口, 传入的参数指定等待连接的最大数量 server.listen(4) serObj,address = server.accept() #当有客户端访问时,实现两边的交流,如果有一方退出,整个程序退出。 #服务器程序通过一个永久循环来接受来自客户端的连接 #这里虽然给出最大连接数为4,但单线程程序也只会响应一个连接 while True: #建立连接后,服务端等待客户端发送的数据,实现通信 re_data = serObj.recv(1024).decode('utf-8') print('client>>',re_data) if re_data == 'quit': break send_data = input('server>>') serObj.send(send_data.encode('utf-8')) if send_data == 'quit': break serObj.close() server.close()
TCP 클라이언트
대부분의 연결은 안정적인 TCP 연결입니다. TCP 연결이 생성될 때 연결을 적극적으로 시작하는 사람을 클라이언트라고 하고, 연결에 자동으로 응답하는 사람을 서버라고 합니다.
예를 들어, 브라우저에서 Sina를 방문하면 우리 자신의 컴퓨터가 클라이언트이고 브라우저는 Sina 서버에 대한 연결을 적극적으로 시작합니다. 모든 것이 순조롭게 진행되면 Sina의 서버는 우리의 연결을 수락하고 TCP 연결이 설정되며 후속 통신은 웹 페이지 콘텐츠를 보내는 것입니다.
import socket client = socket.socket() client.connect(('192.168.1.165',8900)) while True: send_data = input("client>>") client.send(send_data.encode('utf-8')) if send_data == 'quit': break re_data = client.recv(1024).decode('utf-8') if re_data == 'quit': break print("server>>",re_data) client.close()한 창을 사용하여 클라이언트를 실행하고 다른 창을 사용하여 서버를 실행하면 보다 직관적으로 효과를 볼 수 있습니다.
여기서 08_pra.py는 서버 프로그램이고 09_pra.py는 클라이언트 프로그램입니다.
위 내용은 Python에서 TCP 통신의 소켓 구현 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!