网络编程(part11)--socket模块方法及socket套接字属性
Posted GoatGui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程(part11)--socket模块方法及socket套接字属性相关的知识,希望对你有一定的参考价值。
鄙人学习笔记
文章目录
- 举个例子
- 套接字属性
socket模块方法及socket套接字属性
部分socket模块方法
gethostname()
#获取计算机名
gethostbyname()
#通过名称,获取主机ip地址
getservbyname()
#获取服务端口号
getservbyport()
#获取端口对应服务
inet_aton()
#将IP转换为bytes子串
inet_ntoa()
# 将bytes子串转换为IP地址
举个例子
代码:
结果:
套接字属性
sockfd.type
#套接字类型
sockfd.family
#套接字的网络地址类型
sockfd.getsockname()
#获取套接字绑定地址(如果我们不绑定,则系统会自动获取)
sockfd.fileno()
#获取套接字的文件描述符(IO那个部分学了,不要忘了这里的网络操作也是IO操作)
sockfd.getpeername()
#获取连接套接字客户端地址(必须是连接套接字对象,才能调用这个函数,否则会报错)
sockfd.setsockopt(level,option,value)
"""
功能:设置套接字选项(使现有套接字的功能更加丰富)
参数: level 选项类别(我们常用的大类:SOL_SOCKET)
option 具体选项内容
value 选项值(期望值)
"""
sockfd.getsockopt(level,option)
#获取套接字选项值
备注1:我们通过socket()生成套接字对象, 那么我们调用的send()、recv()、listen()、accept()也是套接字属性(属性分为:属性变量/属性方法,或者称为实例变量/实例方法)
备注2:套接字选项分为几个大类,几个大类下还有很多小项,每个小项下还有具体的值。我们对每一类套接字的设置,都可能改变套接字的原有属性行为。
备注3:套接字大类SOL_SOCKET下的几个小类(具体选项内容):
举个例子
代码1:
结果1:
代码2(自己不绑定IP地址时):
结果2:
代码3(自己绑定IP地址时):
结果3:
代码4(设置套接字类别):
结果我就不演示了,若有疑问自己学习。
写个案例
要求:发送端读取图片,然后将图片发送给,接收端,接收端再将接收的数据写入新的文件中。
首先,我们瞧一瞧,我们的图片TX.jpg:
真好看呀~
我们再看一下项目下的文件列表:
OK,现在正式开始敲代码。
发送端代码:
from socket import *
s = socket()
s.connect((127.0.0.1,8888))
f = open(TX.jpg,rb)
#读取内容进行发送
while True:
data = f.read(1024) # 字节串
if not data:
break
s.send(data)
f.close()
s.close()
接收端代码:
from socket import *
s = socket()
s.bind((127.0.0.1,8888))
s.listen(5)
print("等待连接......")
c,addr = s.accept()
print("Connect from",addr)
f = open(new_TX.jpg,wb)
#接受内容写入文件
while True:
data = c.recv(1024) #字节串
if not data:
break
f.write(data)
f.close()
c.close()
s.close()
print("已关闭")
先运行接收端(服务端), 再运行发送端(客户端),运行结果:
接收端运行结果:
再看一下文件列表:
成功创建new_TX.jpg文件啦~
再打开一下new_TX.jpg检查一下:
Perfect!
以上是关于网络编程(part11)--socket模块方法及socket套接字属性的主要内容,如果未能解决你的问题,请参考以下文章
10.python网络编程(socket server 实现并发 part 2)