核心编程(一) -套接字,socket模块,创建TCP,UDP服务器和客户端,套接字方法属性查询表

本文介绍了Python中套接字的基础知识,包括套接字的创建、TCP/UDP服务器和客户端的建立及执行。通过示例详细讲解了如何使用socket模块进行网络通信,涉及AF_INET家族地址、套接字类型如TCP(SOCK_STREAM)和UDP(SOCK_DGRAM)的使用。同时,还提供了套接字对象常用的方法和属性查询表。
摘要由CSDN通过智能技术生成
套接字
socket模块
家族地址
套接字类型
创建TCP服务器
创建TCP客户端
执行TCP服务器和客户端
创建UDP服务器
创建UDP客户端
执行UDP服务器和客户端
常见的套接字对象方法和属性查询表

——————————

套接字:也叫通信端点

在任何类型的通信之前,网络应用程序必须创建套接字。

socket模块

要创建套接字,必须使用socket.socket()函数
语法:socket( family , type , protocol = 0 )
family:家族地址
type:套接字类型
protocol通常省略,默认为0
创建一个TCP/IP套接字:s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
创建一个UDP/IP的套接字:s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

家族名/地址家族:

AF_INET IPv4(默认)

AF_INET6 IPv6

AF_UNIX 只能够用于单一的Unix系统进程间通信

套接字类型:

SOCK_STREAM  创建TCP,面向连接

SOCK_DGRAM   创建UDP,无连接

创建TCP服务器

大概步骤:

1.引用套接字socket模块    from socket import *
2.创建套接字对象           socket('家族名','类型')
3.设置主机和端口           s.bind('地址')
4.设置启动监听器           s.listen()
5.服务器无限循环           while True:
6.等待客户端消息           t,add=s.accept()
7.接收客户端消息           t.recv('缓存大小')
8.向客户端发送消息         t.send('内容''要编码')
9.关闭服务器套接字         s.close()

创建TCP服务器示例:

          #创建TCP服务器[文件1.py]
from socket import *     #【引用套接字模块】要创建套接字(通信端点),必须使用socket模块

HOST=''                  #HOST变量是空白的,表示它可以使用任何可用的地址
PORT=50000               #端口号。端口号的范围是0-65535(小于1024的端口号预留给了系统),这里是随机的端口号
ADDR=(HOST,PORT)    

ds=socket(AF_INET,SOCK_STREAM)  #【创建套接字】(通信端点)对象,AF_INET是网络家族名字,SOCK_STREAM是套接字类型。socket是个类,ds是类的对象
ds.bind(ADDR)            #【设置好主机和端口】调用服务器套接字方法。将地址(主机名,端口号)绑定在套接字上。ADDR=(HOST,PORT),HOST是主机名,PORT是端口号对,这里bind后面只能接收一个参数,所以这样表达
ds.listen(5)             #【设置并启动TCP监听器】

while True:              #将服务器无限循环  
    print('开始接入')
    tsp,add=ds.accept()  #【等待客户端消息】被动接收TCP客户端连接,一直等待直到连接成功。这里的accept()方法调用后会返回两个参数分别赋值给tsp,add
    print('接入成功')
    a=tsp.recv(1024)     #【接收客户端消息】(注意:对象改变了)接收客户端的消息后赋值给变量a,将缓存区的大小设为1kb,可以根据网络性能和程序需要来改变这个容量。
    print(add)           #打印客户端的地址
    tsp.send(bytes('你好','utf-8'))  #【向客户端发送消息】(注意:对象),这里的字符串要转化为字节,不然计算机在传送的时候看不懂。字符串是给人看的,字节才是给计算机看的
ds.close()   #关闭
创建TCP客户端

大概步骤:

1.引用socket套接字模块    from socket import *
2.创建套接字对象          socket('家族名','类型')
3.向服务器发起连接        s.connect('地址')
4.通信循环                while True:
4.向服务器发消息          s.send('消息内容''要编码')
5.接收服务器返回的消息     s.recv('缓存区大小')
6.关闭客户端套接字        s.close()

创建TCP客户端示例:

                #创建TCP客户端[文件2.py]
from socket import *           #引用套接字模块的所有属性
addr=('192.168.0.100',50000)   #把主机名和端口赋值给变量addr

ds=socket(AF_INET,SOCK_STREAM) #创建套接字对象,设置好引用的家族名称和类型
ds.connect(addr)               #主动发起TCP服务器连接,要连接的服务器名和端口设置好

while True:                    #开始通信循环
    a=input('你好啊')           #客户端输入消息赋值给a
    ds.send(bytes(a,'utf-8'))   #将消息发送给服务器,这里要将你想要发送的消息转化为计算机看的懂的字节
    b=ds.recv(1024)             #接收服务器返回的消息赋值给b
    print(b.decode('utf-8'))    #将服务器的消息打印出来,因为返回来的消息是字节,所以要转化成你看的懂的字符串。
ds.close()    

这里你会发现只要是向服务器或者客户端发消息都需要编码为字节,方法bytes(‘str’,utf-8)。如果是要显示给自己看的都要将字节解码你才能认识,方法b.decode(‘utf-8’)。

执行TCP服务器和客户端
  1. 如果在本地电脑测试的话,把软件再多开一个进程,让客户端文件和服务器文件分开在两个软件进程上去执行
  2. 先运行服务器,再运行客户端
  3. 查看主机ip地址win+R,输入cmd,在命令框输入ipconfig,那个ipv4地址就是的。查看自己电脑的主机名,右击我的电脑,查看属性,你的计算机全名就是的
  4. 自己改一改,调试一下更加完整的代码
创建UDP服务器

UDP服务器不需要TCP服务器那么多的设置,因为它们不是面向连接的,除了等待传入的连接以外,几乎不需要做其他工作。套接字类型是SOCK_DGRAM
大概步骤:


1.引入模块            from socket import *  
2.创建服务器套接字     s=socket(AF_INET,SOCK_DGRAM)
3.绑定主机和端口       s.bind()
4.服务器无限循环       while True: 
5.接收客户端消息       data,addr=s.recvfrom('缓存大小')
6.发送客户端消息       s.sendto('内容',addr)
7.关闭服务器           s.close()

创建UDP服务器示例:

               #创建UDP服务器
from socket import *          #【引用套接字模块】要创建套接字(通信端点),必须使用socket模块


HOST=''                       #HOST变量是空白的,表示它可以使用任何可用的地址
PORT=50000                    #端口号。端口号的范围是0-65535(小于1024的端口号预留给了系统),这里是随机的端口号
ADDR=(HOST,PORT)    

ds=socket(AF_INET,SOCK_DGRAM)  #【创建套接字】(通信端点)对象,AF_INET是网络家族名字,SOCK_STREAM是套接字类型。socket是个类,ds是类的对象
ds.bind(ADDR)                  #【设置并绑定好主机和端口】调用服务器套接字方法。将地址(主机名,端口号)绑定在套接字上。ADDR=(HOST,PORT),HOST是主机名,PORT是端口号对,这里bind后面只能接收一个参数,所以这样表达


while True:                    #将服务器无限循环  
    print('开始接入')
    
    data,addr=ds.recvfrom(1024)             #【接收客户端消息】接收客户端的消息和参数后赋值给变量a,将缓存区的大小设为1kb,可以根据网络性能和程序需要来改变这个容量。
    print(data.decode('utf-8'),addr)        #打印客户端的消息和地址
    ds.sendto(bytes('你好','utf-8'),addr)    #【向客户端发送消息和地址】,这里的字符串要转化为字节
ds.close()
创建UDP客户端

大概步骤:

1.引用模块            from socket import * 
2.创建客户端套接字     s=socket(AF_INET,SOCK_DGRAM)
3.发起服务器连接       s.connect(ADDR)  
4.通信循环             while True: 
5.向服务器发送消息      s.sendto('内容',ADDR)
6.接收服务器返回的消息   comment,ADDR=s.recvfrom(缓存大小)
7.关闭客户端套接字      s.close()

创建UDP客户端示例:

                # 创建UDP客户端
from socket import *             #引用套接字模块
ADDR=('6MT9A4A9N7GLT5S',50000)   #把主机名和端口赋值给变量ADDR

ds=socket(AF_INET,SOCK_DGRAM)    #创建套接字对象,设置好引用的家族名称和类型
ds.connect(ADDR)                 #主动发起TCP服务器连接,要连接的服务器名和端口设置好

while True:    
    a=input('你好啊')                    #客户端输入消息赋值给a
    ds.sendto(bytes(a,'utf-8'),ADDR)     #将消息发送给服务器,这里要将你想要发送的消息转化为计算机看的懂的字节
    b,ADDR=ds.recvfrom(1024)             #接收服务器返回的消息赋值给b
    print(b.decode('utf-8'),ADDR)        #将服务器的消息打印出来,因为返回来的消息是字节,所以要转化成你看的懂的字符串。
ds.close()                               #关闭客户端
执行UDP服务器和客户端

UDP服务器和客户端的执行方式与TCP相同。

常见的套接字对象方法和属性查询表

服务器端套接字函数

函数描述
s.bind()绑定地址(主机名、端口号对)到套接字
s.listen()开始TCP监听
s.accept()被动接受TCP客户端连接,(阻塞式)等待连接的到来

客户端套接字函数

函数描述
s.connect()主动初始化TCP服务器连接
s.connect_ex()connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

公共用途的套接字函数

函数描述
s.recv()接受TCP数据
s.send()发送TCP数据
s.sendall()完整发送TCP数据
s.recvfrom()接受UDP数据
s.sendto()发送UDP数据
s.getpeername()连接到当前套接字的远端地址(TCP连接)
s.getsockname()当前套接字的地址
s.getsockopt()返回指定套接字的参数
s.setsockopt()设定指定套接字的参数
s.close()关闭套接字

面向模块的套接字函数

函数描述
s.settimeout()设置阻塞套接字操作的超时时间
s.gettimeout()得到阻塞套接字操作的超时时间
s.setblocking()设置套接字的阻塞与非阻塞模式

面向文件的套接字函数

函数描述
s.fileno()套接字的文件描述符
s.makefile()创建一个与该套接字关联的文件对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值