Python语言 socket编程
小标 2018-12-10 来源 : 阅读 1233 评论 0

摘要:本文主要向大家介绍了Python语言 socket编程,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本文主要向大家介绍了Python语言 socket编程,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

Python 提供了两个基本的 socket 模块。
第一个是 Socket,它提供了标准的 BSD Sockets API。

第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。

socket类型

套接字格式:

socket(family,type[,protocal])
使用给定的地址族、套接字类型、协议编号(默认为0,一般不写)来创建套接字。

地址族:

socket类型

描述

socket.AF_UNIX    单一个unix进程间通信    

socket.AF_INET    服务器之间的通信    

scoket.AF_INET6    IPV6使用    

套接字类型:

socket类型

描述

socket.SOCK_STREAM    流式 for TCP    

socket.SOCK_DGRAM    报文式数据包 for UDP    

scoket.SOCK_RAW    原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。    

socket.SOCK_SEQPACKET    可靠的连续数据包格式    

服务端与客户端不能直接发送列表,元组,字典。需要字符串化repr(data)。

创建TCP服务器示例:

思路:
1、创建socket对象
tcpSerSock=socket(AF_INET,SOCK_STREAM) #创服务器套接字
2、绑定主机和端口,应当是一个元组
tcpSerSock.bind(ADDR) #套接字与地址绑定
3、监听
tcpSerSock.listen(5)  #监听连接,传入连接请求的最大数
4、等待连接
conn,addr = tcpSerSock.accept()   addr是IP地址,conn是发送来的数据对象
5、接受数据
data = conn.recv()   需要用conn这个对象来操作
6、发送数据
conn.send(data) or conn.sendall(data)
7、关闭套接字
conn.close()
tcpSerSock.close()
*这里用的decode和encode是python3创建socket时需要bytes数据
发送的时候,需要使用encode(),对端接收到,需要使用decode()

*

#创建TCP服务器from socket import *from time import ctimeimport subprocessHOST=''PORT=21567BUFSIZ=1024ADDR=(HOST,PORT)tcpSerSock=socket(AF_INET,SOCK_STREAM) #创服务器套接字tcpSerSock.bind(ADDR) #套接字与地址绑定tcpSerSock.listen(5)  #监听连接,传入连接请求的最大数while True:    print('waiting for connection...')    tcpCliSock,addr =tcpSerSock.accept()    print('...connected from:',addr)    while True:        data =tcpCliSock.recv(BUFSIZ).decode()        if not data:           continue        print('command=',data)        status,result = subprocess.getstatusoutput(data)        if result.strip() == 0:            tcpCliSock.send(('[%s] create a dir or file finish! ' %(ctime())).encode())        else:            tcpCliSock.send(('[%s] %s' %(ctime(),result)).encode())    tcpCliSock.close()tcpSerSock.close()

TCP客户端示例:
思路:
1、创建socket对象
tcpCliSock=socket(AF_INET,SOCK_STREAM) #创服务器套接字
2、连接主机,应当是一个元组
tcpCliSock.connect(ADDR) #套接字与地址绑定
3、发送数据
tcpCliSock.send(data) or sendall(data)
4、接收数据
tcpCliSock.recv(1024)
5、关闭
tcpCliSock.close()

from socket import *HOST = 'localhost' #  or 'localhost'PORT = 21567BUFSIZ = 1024ADDR=(HOST,PORT)tcpCliSock = socket(AF_INET,SOCK_STREAM)tcpCliSock.connect(ADDR)while True:    data = input('> ')    #print('data=',data);    if not data:        break    tcpCliSock.send(data.encode())    data = tcpCliSock.recv(BUFSIZ).decode()    if not data:        break    print(data)tcpCliSock.close()

创建UDP服务器

UDP协议则不需要事先建立连接,直接互相发送数据即可。
UDP服务端示例:
思路:
1、创建socket套接字
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
2、绑定
host=("",8000)
s.bind(host)
3、接受连接
s.recvfrom(1024)
4、发送数据
s.sendto(data,addr)   第二个参数为客户端IP
5、关闭
s.close()

import sockets = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)host=("",8000)s.bind(host)while True:    data,address = s.recvfrom(1024)    print(data.decode(),address)    senddata = "this is a udp server"    s.sendto(senddata.encode(),address)c.close()

UDP客户端示例:
1、创建套接字
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
2、连接
host=("127.0.0.1",8000)
s.connect(host)
3、发送数据
s.send(data)
4、接收数据
s.recv(1024)
5、关闭

import sockets = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)host=("127.0.0.1",8000)s.connect(host)while True:    message = input("message:")    s.send(message.encode())    data = s.recv(1024)    print(data.decode())sl.close()

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程