Maison > développement back-end > Tutoriel Python > Programmation réseau de socket Python Communication serveur et client TCP/IP

Programmation réseau de socket Python Communication serveur et client TCP/IP

高洛峰
Libérer: 2017-02-23 16:33:58
original
1975 Les gens l'ont consulté

Programmation réseau de socket Python

Je suis nouveau sur Python. J'ai acheté deux livres il y a quelque temps, "Python Programming from Introduction to Practice" et "Python Core Programming Third. Edition", Vol. Un livre parle principalement d'une grammaire de base et de certaines méthodes d'utilisation de base, tandis que le deuxième livre est beaucoup plus approfondi. Je pense que je n'en ai qu'une petite compréhension. Il m'est arrivé de voir cette partie de la programmation réseau , et il y a encore beaucoup de choses que je ne comprends pas. Mais en y réfléchissant Grâce à votre propre exploration continue et à votre recherche continue d'informations et d'apprentissage, vous devriez devenir plus transparent tôt ou tard...

Le module principal utilisé dans cette partie est le module socket, et vous pouvez trouver la fonction socket dans cette fonction module (), qui est utilisée pour créer des objets socket. Les sockets ont également leur propre ensemble de méthodes, qui peuvent implémenter une communication réseau basée sur les sockets.

Fonction du module socket()

Pour créer un socket, vous devez utiliser la fonction socket.socket() Sa syntaxe générale est la suivante

socket(socket_family, socket_type, protocol=0)
Copier après la connexion

Là où socket_family est AF_UNIX ou AF_INET, socket_type est SOCK_STREAM ou SOCK_DGRAM, le protocole est généralement omis, par défaut = 0.

Créez donc un Socket de la suite TCP/IP, vous pouvez utiliser la méthode suivante pour appeler socket.socket().

tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Copier après la connexion

Créez de la même manière un socket UDP/IP, utilisez la méthode suivante pour appeler

udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Copier après la connexion

Création d'un serveur TCP

Le processus de création d'un Le serveur TCP est essentiellement le suivant, ce qui n'est pas le processus réel. Le code de

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

Le processus de base de création d'un serveur TCP est comme mentionné ci-dessus. . Cela peut être légèrement différent mais l'idée de base devrait être la même. Ce qui suit est le code du vrai serveur :

#!/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()
Copier après la connexion

Créer. Client TCP

Idem que ci-dessus, un simple processus sans code

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

En fait, créer le le client traduit également les étapes ci-dessus

#!/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()
Copier après la connexion

Bien sûr, ce n'est que la communication la plus basique, et je ne connais pas grand-chose sur des choses comme le nom d'hôte et le numéro de port pour le moment. Ce que je fais maintenant, c'est simplement communiquer sur le même ordinateur, et le numéro de port doit également être cohérent, que se passe-t-il si différents ordinateurs communiquent ? Je ne suis qu'un novice...

Merci d'avoir lu, j'espère que cela pourra vous aider, merci pour votre soutien à ce site !

Pour plus d'articles liés à la programmation réseau de socket Python, au serveur TCP/IP et à la communication client, veuillez faire attention au site Web PHP chinois !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal