0
点赞
收藏
分享

微信扫一扫

网络编程(part11)--socket模块方法及socket套接字属性

鄙人学习笔记


文章目录

  • ​​socket模块方法及socket套接字属性​​
  • ​​部分socket模块方法​​
  • ​​举个例子​​
  • ​​套接字属性​​
  • ​​举个例子​​
  • ​​写个案例​​


socket模块方法及socket套接字属性

部分socket模块方法

gethostname()  
#获取计算机名
gethostbyname()
#通过名称,获取主机ip地址
getservbyname()
#获取服务端口号
getservbyport()
#获取端口对应服务
inet_aton()
#将IP转换为bytes子串
inet_ntoa()
# 将bytes子串转换为IP地址

举个例子

代码:
网络编程(part11)--socket模块方法及socket套接字属性_socket套接字属性

结果:
网络编程(part11)--socket模块方法及socket套接字属性_套接字_02

套接字属性

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下的几个小类(具体选项内容):
网络编程(part11)--socket模块方法及socket套接字属性_socket套接字属性_03

举个例子

代码1:
网络编程(part11)--socket模块方法及socket套接字属性_socket模块方法_04

结果1:
网络编程(part11)--socket模块方法及socket套接字属性_socket模块方法_05

代码2(自己不绑定IP地址时):
网络编程(part11)--socket模块方法及socket套接字属性_socket_06

结果2:
网络编程(part11)--socket模块方法及socket套接字属性_python_07

代码3(自己绑定IP地址时):
网络编程(part11)--socket模块方法及socket套接字属性_socket模块方法_08

结果3:
网络编程(part11)--socket模块方法及socket套接字属性_python_09

代码4(设置套接字类别):
网络编程(part11)--socket模块方法及socket套接字属性_python_10

结果我就不演示了,若有疑问自己学习。

写个案例

要求:发送端读取图片,然后将图片发送给,接收端,接收端再将接收的数据写入新的文件中。

首先,我们瞧一瞧,我们的图片TX.jpg:
网络编程(part11)--socket模块方法及socket套接字属性_socket套接字属性_11

真好看呀~

我们再看一下项目下的文件列表:
网络编程(part11)--socket模块方法及socket套接字属性_socket模块方法_12

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("已关闭")

先运行接收端(服务端), 再运行发送端(客户端),运行结果:

接收端运行结果:
网络编程(part11)--socket模块方法及socket套接字属性_socket套接字属性_13

再看一下文件列表:
网络编程(part11)--socket模块方法及socket套接字属性_socket_14

成功创建new_TX.jpg文件啦~

再打开一下new_TX.jpg检查一下:
网络编程(part11)--socket模块方法及socket套接字属性_socket模块方法_15

Perfect!

举报

相关推荐

0 条评论