Socket编程_1

欢迎指正

致力于自动化运维体系和运维技术的研究实践 | 青蛙兄blog

关注Python、GOlang语言在国内的推广、应用 | 青蛙兄blog

Socket介绍

Socket[套接字]

Python中提供socket.py标准库,非常底层的接口库

Socket是一种通用的网络编程接口,和网络层次没有一一对应的关系

协议族

AF表示address Family,用于socket()第一个参数

名称含义
AF_INETIPV4
AF_INET6IPV6
AF_UNIXUnix Domain Socket,windows没有

Socket类型

名称含义
SOCK_STREAM面向连接的流套接字,默认值,TCP协议
SOCK_DGRAM无连接的数据报文套接字,UDP协议

TCP编程

Socket编程,需要两端,一般来说需要一个服务端,一个客户端,服务端称之为Server,客户端称之为Client

TCP服务端

服务器端编程步骤

  • 1、创建Socket对象  
  • 2、绑定IP地址address和端口Port。bind()方法 IPv4地址为一个二元组(“IP地址字符串”,Port)  
  • 3、开始监听,将在指定的IP的端口上监听。listen()方法  
  • 4、获取用于传送数据的Socket对象  
  •    socket.accept() —> (socket object,address info)  
  •    accept方法阻塞等待客户端建立连接,返回一个新的Socket对象和客户端的二元组  
  •    地址是远程客户端的地址,IPv4中它是一个二元组(clientaddr,port)  
  •    1、接收数据  
  •    recv(bufsize[,flags])使用缓存区接收数据  
  •    2、发送数据  
  •    send(bytes)发送数据 

示例:(一个连接的数据反复收发)

import socket  
import logging, time, threading  
  
logging.basicConfig(level=logging.INFO, format='%(thread)s %(message)s')  
  
# tcp  
sock = socket.socket()  # 第一步创建socket对象  
ip = '127.0.0.1'  
port = 9999  
addr = (ip, port)  
sock.bind(addr)  # 第二步绑定IP地址和端口  
sock.listen()  # 第三步监听  
  
conn, remove_addr = sock.accept()  # 第四步,默认阻塞状态,等待连接过来  
logging.info(conn)  
logging.info(remove_addr)  # 远程客户端地址和端口  
data = conn.recv(1024)  # 第五步,接收数据  
logging.info(data.decode())  
msg = 'ack {}'.format(data.decode())  
conn.send(msg.encode()) # 第六步,发收数据  
conn.close()  
sock.close() 

未经允许不得转载:青蛙兄博客 » Socket编程_1

赞 (5)

热门推荐