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

与天地兮比寿,与日月兮齐光。这篇文章主要讲述网络编程(part11)--socket模块方法及socket套接字属性相关的知识,希望能为你提供帮助。
鄙人学习笔记


文章目录

  • ??socket模块方法及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:

【网络编程(part11)--socket模块方法及socket套接字属性】代码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 = https://www.songbingjia.com/android/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 = https://www.songbingjia.com/android/c.recv(1024) #字节串
if not data:
break
f.write(data)


f.close()
c.close()
s.close()

print("已关闭")

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

再看一下文件列表:

成功创建new_TX.jpg文件啦~
再打开一下new_TX.jpg检查一下:

Perfect!


    推荐阅读