>백엔드 개발 >파이썬 튜토리얼 >Python 소켓 네트워크 프로그래밍 TCP/IP 서버 및 클라이언트 통신

Python 소켓 네트워크 프로그래밍 TCP/IP 서버 및 클라이언트 통신

高洛峰
高洛峰원래의
2017-02-23 16:33:581974검색

Python 소켓 네트워크 프로그래밍

저는 Python을 처음 접했습니다. 얼마 전에 "Python 프로그래밍 입문에서 실습"과 "Python Core 프로그래밍 제3권"이라는 책을 두 권 구입했습니다. Edition", Vol. 한 권은 주로 몇 가지 기본 구문과 몇 가지 기본적인 사용 방법에 대해 설명하고 있는 반면, 두 번째 책은 훨씬 더 심층적입니다. 제가 이해한 바는 거의 없는 것 같습니다. 우연히 네트워크 프로그래밍에서 이 부분을 보게 되었습니다. , 그리고 아직도 이해가 안되는 부분이 많습니다. 하지만 생각해보면 자신만의 끊임없는 탐색과 정보와 배움에 대한 끊임없는 탐구를 통해 조만간 더욱 투명해져야 할 것입니다...

메인 모듈 이 부분에서 사용되는 것은 소켓 모듈이며, 소켓 개체를 생성하는 데 사용되는 이 모듈() 함수에서 소켓을 찾을 수 있습니다. 소켓에도 소켓 기반 네트워크 통신을 구현할 수 있는 자체 메소드 세트가 있습니다.

socket() 모듈 함수

소켓을 생성하려면 소켓.socket() 함수를 사용해야 합니다.

socket(socket_family, socket_type, protocol=0)

여기서 소켓_패밀리는 AF_UNIX 또는 AF_INET이고, 소켓 유형은 SOCK_STREAM 또는 SOCK_DGRAM이며, 프로토콜은 일반적으로 생략되며 기본값은 0입니다.

그래서 TCP/를 생성합니다. IP 소켓의 경우 다음 방법을 사용하여 소켓.socket()을 호출할 수 있습니다.

tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

마찬가지로 UDP/IP 소켓을 생성하고 다음 방법을 사용하여 호출합니다.

udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

TCP 서버 생성

TCP 서버를 생성하는 과정은 기본적으로 다음과 같습니다. 실제 코드가 아님

ss = socket()          #创建服务器套接字
    ss.bind()              #套接字与地址绑定
    ss.listen()             #监听连接
    inf_loop:             #服务器无限循环
        cs = ss.accepr()   #接受客户端连接
        comm_loop:      #通信循环
            cs.recv()/cs.send()   #对话(接收/发送)
        cs.close()        #关闭客户端套接字
    ss.close()            #关闭服务器套接字(可选)

실제로 TCP 서버를 만드는 기본 과정은 위에서 언급한 것과 약간 다를 수 있지만 기본 아이디어는 다음과 같습니다. 다음은 실제 서버의 코드입니다:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *      #将 socket 属性引入到命名空间

HOST = ''          #这是对 bind()方法的标识表示可以使用任何可用的地址
PORT = 21571      #端口号
BUFSIZ = 1024     #缓冲区大小,1kb
ADDR = (HOST,PORT)   #地址????

tcpSerSocket = socket(AF_INET,SOCK_STREAM)    #创建 tcp 套接字
tcpSerSocket.bind(ADDR)           #将地址绑定到套接字上
tcpSerSocket.listen(5)            #设置并启动套接字监听

while True:        #无限循环,等待客户端连接
  print('waiting for connection...')   
  tcpCliSocket,addr = tcpSerSocket.accept()    #被动接受客户端连接     
  print('...connected from:',addr)

  while True:      #对话循环,等待客户端发送消息
    data = tcpCliSocket.recv(BUFSIZ)   #接收客户端消息
    if not data:     #如果消息是空白,跳出对话循环,关闭当前连接
      break
    tcpCliSocket.send(data)   #如果收到消息,将消息原封不动返回客户端

  tcpCliSocket.close()
tcpSerSocket.close()

TCP 클라이언트 생성

동일 위와 같이 간단한 비코드 프로세스

cs = socket()    #创建客户端套接字
    cs.connect()     #尝试连接服务器
    comm_loop:     #通信循环
        cs.send()/cs.recv()  #对话(发送/接收)
    cs.close()       #关闭客户端套接字

사실 클라이언트를 생성하는 것도 위 단계를 번역한 것입니다

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *

HOST = 'localhost'    #服务器的主机名
PORT = 21571     #端口号
BUFSIZ = 1024     #缓冲区
ADDR = (HOST,PORT)   #地址

tcpCliSocket = socket(AF_INET,SOCK_STREAM)  #创建客户端套接字
tcpCliSocket.connect(ADDR)     #连接服务器

while True:        #通信循环
  data = input('> ')    #客户端输入信息
  if not data:   #如果输入信息为空,则跳出循环,关闭通信
    break

  data = str.encode(data)      
  tcpCliSocket.send(data)   #发送客户端信息
  data = tcpCliSocket.recv(BUFSIZ)   #接受服务器返回信息
  if not data:    #如果服务器未返回信息,关闭通信循环
    break
  print('get:',data.decode('utf-8'))

tcpCliSocket.close()

물론 이것은 가장 기본적인 통신일 뿐이고 호스트명, 포트번호 등은 아직 잘 모르겠습니다. 현재 제가 하고 있는 일은 같은 컴퓨터, 포트 번호도 동일해야 합니다. 서로 다른 컴퓨터가 통신하는 경우 어떻게 해야 합니까? 저는 초보자일 뿐입니다...

읽어주셔서 감사합니다. 도움이 되었으면 좋겠습니다. 이 사이트를 지원해 주셔서 감사합니다!

Python 소켓 네트워크 프로그래밍 TCP/IP 서버 및 클라이언트 통신과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


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