>백엔드 개발 >파이썬 튜토리얼 >Python을 사용하여 간단한 소켓 통신을 구현하는 방법 소개

Python을 사용하여 간단한 소켓 통신을 구현하는 방법 소개

高洛峰
高洛峰원래의
2017-03-16 15:36:432352검색

이 글에서는 파이썬에서 간단한 소켓 통신을 구현하는 방법을 주로 소개하고, 소켓 통신 서버와 클라이언트의 구체적인 구현 기법을 예시 형태로 분석해 도움이 필요한 친구들이

를 참고할 수 있도록 하겠다.

이 기사의 예에서는 Python에서 간단한 소켓 통신을 구현하는 방법을 설명합니다. 참고용으로 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

저는 방금 Python을 접하기 시작했고 helloworld 프로그램(UDP 프로토콜에 대한 소켓 통신 데모)을 구현했습니다.

우선 서버측은 다음과 같이 구현됩니다.


import socket, traceback
host = '' # Bind to all interfaces 
port = 51500
# Step1: 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Step2: 设置socket选项(可选)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Step3: 绑定到某一个端口
s.bind((host, port))
# Step4: 监听该端口上的连接
while 1:
  try:
    message, address = s.recvfrom(8192)
    print "Got data from ", address
    s.sendto("Data is received succeefully.", address)
  except (KeyboardInterrupt, SystemExit):
    print "raise"
    raise
  except :
    print "traceback"
    traceback.print_exc()

그 중 호스트는 비어있어 바인딩이 가능하다는 의미입니다. 모든 인터페이스 및 주소에 대해 어떤 클라이언트가 요청을 하든 동일한 포트에 바인딩되어 있는 한 서버는 요청을 수신할 수 있습니다.

tcp 연결에서 클라이언트 요청을 모니터링하려면 listen 또는 accept함수를 사용해야 하며 전용 소켓과 원격 연결이 있어야 합니다.

그런 다음 클라이언트가 을 구현하도록 합니다.


import socket, sys
# Step1: 输入host和port信息
host = raw_input('please input host name: ')
textport = raw_input('please input textport: ')
# Step2: 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
  port = int(textport)
except ValueError:
  port = socket.getservbyname(textport, 'udp')
# Step3: 打开socket连接  
s.connect((host, port))
# Step4: 发送数据
print "Enter data to transmit: "
data = sys.stdin.readline().strip()
s.sendall(data)
# Step5: 接收服务器发过来的数据
print "Looking for replies; press Ctrl-C or Ctrl-Break to stop"
while 1:
  buf = s.recv(2048)
  if not len(buf):
    break
  sys.stdout.write(buf)

이 예제는 매우 간단하므로 다음과 같은 방식으로 구현할 수 있습니다. C 언어 버전은 거의 동일합니다. 소켓프로그래밍만 이해하면 다른 언어로 구현하는 것은 거의 동일할 것 같습니다.

위 내용은 Python을 사용하여 간단한 소켓 통신을 구현하는 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.