> 백엔드 개발 > 파이썬 튜토리얼 > Python 다중 스레드 소켓 프로그래밍에서 여러 클라이언트를 연결하는 방법

Python 다중 스레드 소켓 프로그래밍에서 여러 클라이언트를 연결하는 방법

巴扎黑
풀어 주다: 2017-09-13 09:39:16
원래의
1942명이 탐색했습니다.

이 글은 주로 Python 다중 스레드 소켓 프로그래밍과 다중 클라이언트 액세스를 자세히 소개합니다. 관심 있는 친구들이 참고할 수 있습니다.

Python에서 소켓 통신을 구현하는 서버 측은 비교적 복잡합니다. 간단하므로 클라이언트는 기본적으로 sockct 모듈을 사용하여 구현되며, 서비스 측에서 사용할 수 있는 모듈은 다음과 같습니다.

Python 다중 스레드 소켓 프로그래밍에서 여러 클라이언트를 연결하는 방법

1. 클라이언트


#!/usr/bin/env python
#coding:utf-8
'''
file:client.py
date:9/9/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程客户端,python3.6.2
'''
import socket,sys
HOST = '192.168.1.6'
PORT = 8998
ADDR =(HOST,PORT)
BUFSIZE = 1024

sock = socket.socket()
try:
 sock.connect(ADDR)
 print('have connected with server')

 while True:
  data = input('lockey# ')
  if len(data)>0:
  print('send:',data)
  sock.sendall(data.encode('utf-8')) #不要用send()
  recv_data = sock.recv(BUFSIZE)
  print('receive:',recv_data.decode('utf-8'))
  else:
  sock.close()
  break
except Exception:
 print('error')
 sock.close()
 sys.exit()
로그인 후 복사


2.

여러 클라이언트가 동시에 서비스에 액세스하고 통신할 수 있도록 서버는 SocketServer 모듈을 사용하여 이를 구현합니다. 이러한 방식으로 사용자는 상위 프로세스를 사용하여 이를 처리할 필요가 없습니다. 자식 스레드가 종료됩니다. 소켓을 닫는 것에 대해 걱정할 필요가 없으며 모든 것이 SocketServer에 의해 수행됩니다.


#!/usr/bin/env python
#coding:utf-8
'''
file:client.py
date:9/9/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程服务器端,python3.6.2
'''
from socketserver import BaseRequestHandler,ThreadingTCPServer
import threading

BUF_SIZE=1024

class Handler(BaseRequestHandler):
 def handle(self):
  address,pid = self.client_address
  print('%s connected!'%address)
  while True:
   data = self.request.recv(BUF_SIZE)
   if len(data)>0:
    print('receive=',data.decode('utf-8'))
    cur_thread = threading.current_thread()
    #response = '{}:{}'.format(cur_thread.ident,data)
    self.request.sendall('response'.encode('utf-8'))
    print('send:','response')
   else:
    print('close')
    break

if __name__ == '__main__':
 HOST = '192.168.1.6'
 PORT = 8998
 ADDR = (HOST,PORT)
 server = ThreadingTCPServer(ADDR,Handler) #参数为监听地址和已建立连接的处理类
 print('listening')
 server.serve_forever() #监听,建立好TCP连接后,为该连接创建新的socket和线程,并由处理类中的handle方法处理
 print(server)
로그인 후 복사

다음 테스트에서는 다른 호스트와 이 시스템의 두 인터럽트를 사용하여 서버에 연결했습니다. 둘 다 정상적으로 연결되고 데이터 응답 상호 작용을 수행할 수 있습니다.

Python 다중 스레드 소켓 프로그래밍에서 여러 클라이언트를 연결하는 방법

참고: 실행 중인 플랫폼은 다음과 같습니다. 이 프로그램 예제는 rhel7 .2.x86_64이고 Python 버전은 3.6.2입니다. Windows 플랫폼 및 다른 Python 버전 사용자에게는 특정 호환성이 부족할 수 있습니다. !

위 내용은 Python 다중 스레드 소켓 프로그래밍에서 여러 클라이언트를 연결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿