Python3-22/456- 017Python网络编程

目录

一、网络服务概述

二、socket函数

三、简单示例


一、网络服务概述

        Python提供了两个级别访问的网络服务,其一是低级别的网络服务支持基本的Socket,它提供了标准的BSD Sockets API,可以访问底层操作系统Socket接口的全部方法;高级别的网络服务模块SocketServer,它提供了服务器中心类,可以简化网络服务器的开发。

Socket又称为“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求,使主机间或者一台主机上的进程间可以通讯。

二、socket函数

2.1 在python中,使用socket() 函数来创建套接字,语法格式如下

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

family: 套接字家族,可以是AF_UNIX 或者是AF_INET

type: 套接字类型,可根据面向连接的还是非连接的分为SOCK_STREAM或SOCK_DGRAM

protocol: 一般不填,默认为0

2.2 socket 套接字对象中常用的方法和属性

2.2.1 服务器端套接字方法                                 

方法名称方法描述
s.bind()将地址(主机名,端口号)绑定在套接字上
s.listen()设置并启动TCP监听器
s.accept()被动接受TCP客户端连接,一直等待直到连接到达(阻塞)

2.2.2 客户端套接字方法                                                 

方法名称方法描述
s.connect()主动发起TCP服务器连接
s.connect_ex()connect()的扩展版本,此时会以错误码的形式返回,而不是一个异常抛出

  2.2.3 普通的套接字方法

方法名称        方法描述
s.recv()接收TCP消息
s.recv_into()接收TCP消息到指定的缓冲区
s.send()发送TCP消息
s.sendall()完整发送TCP消息
s.recvfrom()接收UDP消息
s.recvfrom_into()接收UDP消息到指定的缓冲区
s.sendto()发送UDP消息
s.getpeername()连接到套接字(TCP)的远程地址
s.getsockname()当前套接字的地址
s.setsockopt()设置给定套接字选项的值
s.getsockopt()返回给指定套接字选项的值

s.shutdown()

关闭连接
s.close()关闭套接字
s.detach()在未关闭文件描述符的情况下关闭套接字,返回文件描述符
s.ioctl()控制套接字的模式(仅支持windowns)

  2.2.4 面向阻塞的套接字方法

方法名称方法描述
s.setblocking()设置套接字的阻塞式或非阻塞式
s.settimeout()设置阻塞套接字操作的超时时间
s.gettimeout()获取阻塞套接字操作的超时时间

2.2.5 面向文件的套接字方法

方法名称方法描述
s.fileno()套接字的文件描述符

s.makefile()

创建与套接字关联的文件对象

2.2.6 数据属性

属性名称属性描述
s.family套接字家族
s.type套接字类型

s.proto

套接字协议

三、简单示例

3.1 服务器端

        使用socket模块的socket函数来创建一个socket对象,socket对象可以通过调用其它函数来设置一个socket服务,此外通过调用bind(hostname,port)函数来指定服务的port(端口),接着调用socket对象的accept方法,该方法等待客户端的连接,并返回connection对象,表示已连接到客户端。

import socket
import sys
#创建socket对象
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#获取本地主机名
host =  socket.gethostname()
port = 9999

#绑定端口号
serversocket.bind((host, port))
#设置最大连接数,超过后排队
serversocket.listen(5)

while True:
    #建立客户端连接
    clientsocket, addr = serversocket.accept()
    print("连接地址: %s" % str(addr))
    msg = "Python基础练习!" + "\r\n"
    clientsocket.send(msg.encode('utf-8'))
    clientsocket.close()

3.2 客户端

        客户端示例连接以上创建的服务,端口号为9999,socket.connect(hostname, port)方法打开一个TCP连接到主机为hostname端口号为port的服务器,连接后我们就可以从服务端获取数据,另外要记住的是,操作完成后需要关闭连接。

import socket
import sys

#创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#获取本地主机名和设置端口号
host = socket.gethostname()
port = 9999

#连接服务,指定主机和端口
s.connect((host, port))

#接收小于1024字节的数据
msg = s.recv(1024)
s.close()
print(msg.decode('utf-8'))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值