>  기사  >  백엔드 개발  >  Python 소켓 프로그래밍

Python 소켓 프로그래밍

巴扎黑
巴扎黑원래의
2017-09-15 10:47:061670검색

이 기사는 주로 Python 네트워크 프로그래밍 관련 정보를 자세히 소개합니다. Python 소켓 프로그래밍에는 특정 참조 가치가 있습니다. 관심 있는 친구는 이를 참조할 수 있습니다.

Python은 네트워크 서비스에 대한 두 가지 수준의 액세스를 제공합니다.

저수준 네트워크 서비스는 표준 BSD 소켓 API를 제공하고 기본 운영 체제 소켓 인터페이스의 모든 메서드에 액세스할 수 있는 기본 소켓을 지원합니다.
네트워크 서버 개발을 단순화하기 위해 서버 센터 클래스를 제공하는 고급 네트워크 서비스 모듈 SocketServer.

소켓이란?

소켓은 "소켓"이라고도 합니다. 응용 프로그램은 일반적으로 "소켓"을 통해 네트워크에 요청하거나 네트워크 요청에 응답하므로 컴퓨터의 호스트나 프로세스가 서로 통신할 수 있습니다. 의사소통.

socket() 함수

Python에서는 소켓을 생성하기 위해 소켓() 함수를 사용합니다. 구문 형식은 다음과 같습니다:

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

매개변수

family: 소켓 패밀리는 AF_UNIX 또는 AF_INET일 수 있습니다.
type: 소켓 유형은 연결 지향인지 비연결인지에 따라 SOCK_STREAM 또는 SOCK_DGRAM으로 나눌 수 있습니다.
프로토콜: 일반적으로 채워지지 않은 상태로 기본값입니다. 0입니다.

socket 서버와 클라이언트 간의 간단한 통신 구현(ssh의 일부 기능 및 자동 응답 시뮬레이션)

서버 측의 간단한 프로그램 예:


#!/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)
 #将结果发送给客户端

클라이언트 측의 간단한 구현 :


#!/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()
#用户终止程序时关闭连接

서버측 실행 결과

Python 소켓 프로그래밍

클라이언트 실행 스크린샷

Python 소켓 프로그래밍

위 내용은 Python 소켓 프로그래밍의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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