python 网络编程

本文介绍了Python网络编程的基础,包括IP地址的五类划分,重点讲解了A、B、C类地址的特征和用途,同时提到了D类和E类的特殊用途。此外,还简述了TCP和UDP两种通信协议的特点。最后,提供了Python实现的基本网络编程示例,涵盖服务器和客户端的代码。

python 网络编程详解

网络编程的专利权应该属于Unix,各个平台(如windows、Linux等)、各门语言(C、C++、Python、Java等)所实现的符合自身特性的语法都大同小异。在我看来,懂得了Unix的socket网络编程,其他的形式的网络编程方法也就知道了。这句话说得还不太严谨。准确的应该说成懂得了socket编程的原理,网络编程也就知道了,不同之处就在于每个平台,每个语言都有自己专享的语法,我们直接灵活套用就行了。

网络编程:实现计算机与计算机之间的通信。

IP地址分为A,B,C,D,E五类。


网络号:用于识别主机所在的网络;


主机号:用于识别该网络中的主机。


其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用。这三种是主要的。IP地址分为五

类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各

类可容纳的地址数目不同。


其中A类、B类、和C类这三类地址用于TCP/IP节点,其它两类D类和E类被用于特殊用途。

A、B、C三类IP地址的特征:当将IP地址写成二进制形式时,A类地址的第一位总是O,B类地址的前两位总是10,C类地址的前三位总是110。


1. A类地址:


 ⑴ A类地址第1字节为网络地址,其它3个字节为主机地址。

 ⑵ A类地址范围:1.0.0.1—126.155.255.254

 ⑶ A类地址中的私有地址和保留地址:

 ① 10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。

 ② 127.X.X.X是保留地址,用做循环测试用的。

2. B类地址:


 ⑴ B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。
 ⑵ B类地址范围:128.0.0.1—191.255.255.254
 ⑶ B类地址的私有地址和保留地址
 ① 172.16.0.0—172.31.255.255是私有地址
 ② 169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。


3. C类地址:


 ⑴ C类地址第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另外第1个字节的前三位固定为110。
 ⑵ C类地址范围:192.0.0.1—223.255.255.254
 ⑶ C类地址中的私有地址:
 192.168.X.X是私有地址。

4. D类地址:


 ⑴ D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。
 ⑵ D类地址范围:224.0.0.1—239.255.255.254

5. E类地址:
 ⑴ E类地址也不分网络地址和主机地址,它的第1个字节的前五位固定为11110。
 ⑵ E类地址范围:240.0.0.1—255.255.255.254


计算机与计算机通信会用到通信协议

通信协议,有很多下面只说俩种经常用的:

tcp:  可靠的,有状态的,长连接的协议,想打电话一样

udp:不可靠,无连接,像发短信一样,发送的包的顺序要有编号

下面是用python实现的最基本的网络编程的例子,即依托于客户端-服务器的架构,实现客户端与服务器之间的双向“数据流通”。


服务器的代码:

import socket,threading
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("127.0.0.2",9999))#绑定服务器地址和端口号
print("服务器以等待")
server.listen(5)     #最多5个客户
c=server.accept()   #accept()用来接收客户端的链接,此c是元组,表示得到的是客户端的地址和端口
print(c)
def myrerv(c):
    while True:
        msg= c[0].recv(1024)   #c[0]是用来得到客户端的socket,得到客户端的socket就可以进行通信了
        print(msg.decode())     #decode()方法用来给msg这个对象解码的
threading._start_new_thread(myrerv,(c,))  #启动线程来运行myrerv这个函数,并传参c
def myinput():
    while True:
        msg=input()
        c[0].send(msg.encode())  #encode()用来给msg这个对象编码的,send()这个方法用来发送信息的
threading._start_new_thread(myinput())

下面是客户端的代码:

import socket,threading
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("172.16.0.255",9999))#链接服务器地址和端口号
print("客户端以链接")

def myrerv(c):
    while True:
        msg= c.recv(1024)#c是用来得到服务器的socket,得到服务器的socket就可以进行通信了
        print(msg.decode())
threading._start_new_thread(myrerv,(client,))
def myinput():
    while True:
        msg=input()
        client.send(msg.encode())
threading._start_new_thread(myinput())
注:必须先启动服务器,再启动客户端


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值