迪士尼彩乐源码源码搭建
地址一:【hubawl.com】狐霸源码论坛
地址二:【bbscherry.com】车厘子源码论坛
套接字
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()
1
2
3
4
5
6
7
8
9
创建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() #关闭
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
创建TCP客户端
大概步骤:
1.引用socket套接字模块 from socket import *
2.创建套接字对象 socket('家族名','类型')
3.向服务器发起连接 s.connect('地址')
4.通信循环 while True:
4.向服务器发消息 s.send('消息内容','要编码')
5.接收服务器返回的消息 s.recv('缓存区大小')
6.关闭客户端套接字 s.close()
1
2
3
4
5
6
7
创建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()
1
2
3
4
5
6
7
8
9
10
11
12
13
这里你会发现只要是向服务器或者客户端发消息都需要编码为字节,方法bytes(‘str’,utf-8)。如果是要显示给自己看的都要将字节解码你才能认识,方法b.decode(‘utf-8’)。
执行TCP服务器和客户端
如果在本地电脑测试的话,把软件再多开一个进程,让客户端文件和服务器文件分开在两个软件进程上去执行
先运行服务器,再运行客户端
查看主机ip地址win+R,输入cmd,在命令框输入ipconfig,那个ipv4地址就是的。查看自己电脑的主机名,右击我的电脑,查看属性,你的计算机全名就是的
自己改一改,调试一下更加完整的代码
创建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()
1
2
3
4
5
6
7
8
创建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()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
创建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()
1
2
3
4
5
6
7
创建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() #关闭客户端
1
2
3
4
5
6
7
8
9
10
11
12
13
执行UDP服务器和客户端
UDP服务器和客户端的执行方式与TCP相同。
常见的套接字对象方法和属性查询表
服务器端套接字函数