网络编程(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地址

举个例子

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

结果:
网络编程(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套接字属性_python_05

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

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

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

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

代码4(设置套接字类别):
网络编程(part11)--socket模块方法及socket套接字属性_socket模块方法_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套接字属性_套接字_14

成功创建new_TX.jpg文件啦~

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

Perfect!

以上是关于网络编程(part11)--socket模块方法及socket套接字属性的主要内容,如果未能解决你的问题,请参考以下文章

python基础之模块part1

Python ---- Part 8

10.python网络编程(socket server 实现并发 part 2)

10.python网络编程(startin part 1)

python基础之socket编程part2---粘包和并发

WEEK8:Python网络编程 Socket编程