Heim >Backend-Entwicklung >Python-Tutorial >Python-Socket-Netzwerkprogrammierung, TCP/IP-Server- und Client-Kommunikation

Python-Socket-Netzwerkprogrammierung, TCP/IP-Server- und Client-Kommunikation

高洛峰
高洛峰Original
2017-02-23 16:33:582003Durchsuche

Python-Socket-Netzwerkprogrammierung

Ich bin neu in Python und habe vor einiger Zeit zwei Bücher gekauft, „Python Programming from Introduction to Practice“ und „Python Core Programming Third“. Edition“, Bd. In einem Buch geht es hauptsächlich um einige grundlegende Grammatik und einige grundlegende Verwendungsmethoden, während das zweite Buch viel ausführlicher ist. Ich glaube, ich habe nur ein geringes Verständnis davon. Ich habe diesen Teil der Netzwerkprogrammierung zufällig gesehen , und es gibt immer noch viele Dinge, die ich nicht verstehe. Aber wenn Sie darüber nachdenken, sollten Sie früher oder später durch Ihre eigene kontinuierliche Erkundung und Suche nach Informationen und Lernen transparenter werden ...

Das Hauptmodul In diesem Teil wird das Socket-Modul verwendet. In diesem Modul finden Sie die Socket-Funktion (), mit der Socket-Objekte erstellt werden. Sockets verfügen auch über einen eigenen Satz von Methoden, mit denen eine Socket-basierte Netzwerkkommunikation implementiert werden kann.

Socket()-Modulfunktion

Um einen Socket zu erstellen, müssen Sie die Funktion socket.socket() verwenden. Die allgemeine Syntax lautet wie folgt:

socket(socket_family, socket_type, protocol=0)

Wobei socket_family AF_UNIX oder AF_INET ist, socket_type SOCK_STREAM oder SOCK_DGRAM ist, wird das Protokoll normalerweise weggelassen, Standard = 0.

Erstellen Sie also ein TCP/IP-Suite-Socket, Sie können die folgende Methode verwenden, um socket.socket() aufzurufen.

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

Erstellen Sie auf ähnliche Weise einen UDP/IP-Socket und verwenden Sie ihn Rufen Sie die folgende Methode auf:

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

Erstellen eines TCP-Servers

Der Prozess des Erstellens eines Der TCP-Server ist im Grunde wie folgt, was nicht der eigentliche Prozess ist. Der Code von

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

Der grundlegende Prozess zum Erstellen eines TCP-Servers ist wie oben erwähnt . Es kann etwas anders sein, aber die Grundidee sollte dieselbe sein. Der Code des echten Servers ist:

#!/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()

Erstellen TCP-Client

Dasselbe wie oben, ein einfacher Nicht-Code-Prozess

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

Tatsächlich wird beim Erstellen eines Der Kunde übersetzt auch die oben genannten Schritte

#!/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()

Natürlich ist dies nur die grundlegendste Kommunikation, und ich weiß nicht viel über Dinge wie den Hostnamen Was ich jetzt mache, ist nur die Kommunikation auf demselben Computer, und die Portnummer muss auch konsistent sein. Was ist, wenn verschiedene Computer kommunizieren? Ich bin nur ein Neuling...

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, vielen Dank für Ihre Unterstützung dieser Website!

Weitere Artikel zur Python-Socket-Netzwerkprogrammierung, TCP/IP-Server- und Client-Kommunikation finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn