Maison  >  Article  >  développement back-end  >  Programmation de sockets Python

Programmation de sockets Python

巴扎黑
巴扎黑original
2017-09-15 10:47:061672parcourir

Cet article présente principalement en détail les informations pertinentes sur la programmation réseau Python. La programmation socket Python a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

Python offre deux niveaux d'accès aux services réseau.

Le service réseau de bas niveau prend en charge Socket de base, qui fournit l'API BSD Sockets standard et peut accéder à toutes les méthodes de l'interface Socket du système d'exploitation sous-jacent.
Module de service réseau de haut niveau SocketServer, qui fournit des classes de centre serveur pour simplifier le développement de serveurs réseau.

Qu'est-ce que Socket ?

Socket est également appelé « socket ». Les applications envoient généralement des requêtes ou répondent au réseau via « socket ». Les requêtes permettent la communication. entre hôtes ou entre processus sur un ordinateur.

Fonction socket()

En Python, on utilise la fonction socket() pour créer une socket La syntaxe est la suivante :

socket. .socket ([family[, type[, proto]]])

Parameters

famille : La famille de socket peut être de type AF_UNIX ou AF_INET
: Le type de socket peut be Selon qu'il est orienté connexion ou non-connexion, il est divisé en SOCK_STREAM ou SOCK_DGRAM
protocole : Généralement, s'il n'est pas renseigné, la valeur par défaut est 0.

socket réalise une communication simple entre le serveur et le client (simulant ssh) Quelques fonctions et réponses automatiques)

Exemple de programme simple côté serveur :


#!/usr/bin/env python
#coding:utf-8
'''
file:server.py
date:9/8/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程服务器端,python3.6.2
'''
import re
import socket,time,os
s = socket.socket()   # 创建 socket 对象
host = '127.0.0.1'#socket.gethostname() # 获取本地主机名
port = 9999    # 设置端口
s.bind((host, port))  # 绑定端口
s.listen(5)     # 等待客户端连接
while True:
 conn, addr = s.accept()  # 建立客户端连接。
 print('conneted address:'.decode('utf-8'), addr)#显示连接到服务器的客户端的地址
 while True:
  data = conn.recv(1024)
  #接收到的客户端的请求或者返回
  if not data:
  #当返回信息为空或者请求为空时断开客户端连接
   print('Connection closed!')
   break;
 data = data.decode('utf-8')
 #以下前三个条件都是设置的自动检测应答,最后一个是根据输入的内容进行的命令执行,并将结果返回给客户端
  if re.findall(r'who',data):
   reply = 'I am lockey'.encode('utf-8')
  elif re.findall(r'gender',data):
   reply = 'A boy'.encode('utf-8')
  elif re.findall(r'age',data):
   reply = '23'.encode('utf-8')
  else:
   print('execute com:',data)
   cmd_res = os.popen(data).read()
   if not cmd_res:
   #对于命令的执行如果没有返回值的话就给客户端发送一条信息
    conn.send('No response'.encode('utf-8'))
    continue
   reply = cmd_res.encode('utf-8')
 conn.send(reply)
 #将结果发送给客户端

Implémentation simple côté client :


#!/usr/bin/env python
#coding:utf-8
'''
file:client.py
date:9/8/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程客户端,python3.6.2
'''
import socket,time    # 导入 socket 模块

s = socket.socket()   # 创建 socket 对象
host = '127.0.0.1'#socket.gethostname() # 获取本地主机名
port = 9999    # 设置端口好

s.connect((host, port))
while True:
 cmd = input("lockey#")
 #用户输入
 if len(cmd) == 0:continue
 #如果用户未输入内容则继续下一次输入
 s.send(cmd.encode('utf-8'))
 #将用户输入的内容发送给客户端等待结果
 result = s.recv(1024)
 if not result:
 #如果服务端没有返回结果则继续下一次输入
  continue
 print(result.decode('utf-8'))
 #如果服务端有返回则打印结果
s.close()
#用户终止程序时关闭连接

Résultats d'exécution côté serveur

Programmation de sockets Python

Captures d'écran en cours d'exécution côté client

Programmation de sockets Python

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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