Python网络编程笔记

原创 2018年04月17日 15:35:22

TCP/IP协议(族)

    理解

        网络协议,不同计算机进数据通信的一种通用协议族,此族里包含成百上千种协议,主要协议为TCP和IP协议,所以大家把网络协议总体简称为TCP/IP协议

    TCP/IP协议中各类协议的关系

端口 

    端口号

    端口好比进入一栋楼的楼门

    知名端口

        众所周知的端口号,范围从0到1023,可以理解为常用电话号,比如110\10086等
        例如80端口分配给HTTP服务
        21端口分配给FTP服务

    动态端口

        动态端口范围是1024到65535
         不以固定分配某种服务,而是动态分配,当某服务所在进程关闭时,同时释放所占端口

    查看端口

netstat -an #查看端口状态

IP地址

    概念

        在网络上用来标记一台电脑的一串数字,例如:192.168.191.1
        每个IP分为两个部分一个为网络号一个为主机号

    A类IP地址

         一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,

         地址范围1.0.0.1-126.255.255.254

        二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110

        可用的A类网络有126个,每个网络能容纳1677214个主机

    B类IP地址

        一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,

        地址范围128.1.0.1-191.255.255.254

        二进制表示为:10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110

        可用的B类网络有16384个,每个网络能容纳65534主机

    C类IP地址

        一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”

        范围192.0.1.1-223.255.255.254

        二进制表示为: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110

        C类网络可达2097152个,每个网络能容纳254个主机

    D类地址用于多点广播

        D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。

        它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中

        多点广播地址用来一次寻址一组计算机 s 地址范围224.0.0.1-239.255.255.254

    E类IP地址

        以“1111”开始,为将来使用保留

        E类地址保留,仅作实验和开发用

    私有ip


10.0.0.0~10.255.255.255

172.16.0.0~172.31.255.255

192.168.0.0~192.168.255.255

    注意

IP地址127.0.0.1~127.255.255.255用于回路测试,

如:127.0.0.1可以代表本机IP地址,用http://127.0.0.1就可以测试本机中配置的Web服务器。


socket(套接字)

    

    socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:

    它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的

    例如我们每天浏览网页、QQ 聊天、收发 email 等等

    创建socket

        在 Python 中 使用socket 模块的函数 socket 就可以完成
import socket
socket.socket(AddressFamily, Type)

  说明:

    

        函数 socket.socket 创建一个 socket,该函数带有两个参数:Address Family:

        可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用 AF_INETType:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)

    创建一个tcp socket(tcp套接字)

import socket

# 创建tcp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# ...这里是使用套接字的功能(省略)...

# 不用的时候,关闭套接字
s.close()

    创建一个udp socket(udp套接字)

import socket

# 创建udp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# ...这里是使用套接字的功能(省略)...

# 不用的时候,关闭套接字
s.close()

    UDP网络程序收发数据过程

        1.创建客户端套接字
        2.收/发数据
        3.关闭套接字

    UDP收发数据demo


#coding=utf-8

from socket import *

# 1. 创建udp套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)

# 2. 准备接收方的地址
dest_addr = ('192.168.236.129', 8080)

# 3. 从键盘获取数据
send_data = input("请输入要发送的数据:")

# 4. 发送数据到指定的电脑上
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

# 5. 等待接收对方发送的数据
recv_data = udp_socket.recvfrom(1024)  # 1024表示本次接收的最大字节数

# 6. 显示对方发送的数据
# 接收到的数据recv_data是一个元组
# 第1个元素是对方发送的数据
# 第2个元素是对方的ip和端口
print(recv_data[0].decode('gbk'))
print(recv_data[1])

# 7. 关闭套接字
udp_socket.close()

python3转码

bytes.decode(encoding="utf-8", errors="strict") #解码
str.encode(encoding="utf-8", errors="strict") #编码

    注:如果遇到解不了的特殊字符可使用忽略机制  格式:errors="ignore"

TCP相关

    TCP理解

        TCP三次握手

    

        TCP四次握手

    

    创建一个TPC客户端

    流程逻辑:创建socket——》根据对应服务器ip与prot建立链接——》发送数据——》关闭socket断开链接

    demo

from socket import *

# 创建socket
tcp_client_socket = socket(AF_INET, SOCK_STREAM)

# 目的信息
server_ip = input("请输入服务器ip:")
server_port = int(input("请输入服务器port:"))

# 链接服务器
tcp_client_socket.connect((server_ip, server_port))

# 提示用户输入数据
send_data = input("请输入要发送的数据:")

tcp_client_socket.send(send_data.encode("gbk"))

# 接收对方发送过来的数据,最大接收1024个字节
recvData = tcp_client_socket.recv(1024)
print('接收到的数据为:', recvData.decode('gbk'))

# 关闭套接字
tcp_client_socket.close()

    创建一个TCP服务器端

    流程逻辑:创建socket——》绑定本地信息(IP、port)——》使用listen改变socket为被动接收——》当有客户的进行链接时,为其创建单独的socket建立链接——》进行数据交互——》断开生成的socket断开与客户的链接

    demo

from socket import *

# 创建socket
tcp_server_socket = socket(AF_INET, SOCK_STREAM)

# 本地信息
address = ('', 7788)

# 绑定
tcp_server_socket.bind(address)

# 使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
tcp_server_socket.listen(128)

# 如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
# client_socket用来为这个客户端服务
# tcp_server_socket就可以省下来专门等待其他新客户端的链接
client_socket, clientAddr = tcp_server_socket.accept()

# 接收对方发送过来的数据
recv_data = client_socket.recv(1024)  # 接收1024个字节
print('接收到的数据为:', recv_data.decode('gbk'))

# 发送一些数据到客户端
client_socket.send("thank you !".encode('gbk'))

# 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,如果还需要服务,只能再次重新连接
client_socket.close()

TCP下载器

    客户端代码

import socket

if __name__ == '__main__':
    #创建socket
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #与目标服务器构建链接
    tcp_client_socket.connect(('192.168.43.148', 1991))
    #发送下载目标文件名称
    file_name = input('请输入您即将下载文件名称')
    tcp_client_socket.send(file_name.encode('utf-8'))
    #接收目标文件
    object_content = tcp_client_socket.recv(1024)
    #新建文件并写入
    object_file = open(file_name, 'wb')
    object_file.write(object_content)
    #关闭文件
    object_file.close()
    #关闭socket
    tcp_client_socket.close()

    服务器端

import socket




if __name__ == '__main__':

    #创建socket
    tcp_sever_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #绑定服务器信息
    tcp_sever_socket.bind(('',1991))

    #设置listen
    #将socket转为被动
    tcp_sever_socket.listen(5)
    #print(tcp_sever_socket.accept()) # 测试使用
    client_socket, client_prot = tcp_sever_socket.accept()
    #接收客户端发送信息
    recv_data = client_socket.recv(1024)
    print(recv_data)
    object_file = recv_data.decode('utf-8')
    #打开文件
    object_content = open(object_file, 'rb')
    #读取内容
    object_txt = object_content.read()
    #发送内容
    client_socket.send(object_txt)
    #关闭socket
    client_socket.close()

    tcp_sever_socket.close()


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38691608/article/details/79973462

《Python网络编程基础》笔记(一)----底层网络

一. 客户端,服务器网络 1.TCP是一些协议的合集。Internet是在一些共享的线路上发送数据的。 2.TCP把你要发送的数据流分解成很多小信息包在Internet上传输。 为了实现...
  • chchlh
  • chchlh
  • 2014-07-21 01:49:27
  • 5877

《python网络编程基础》笔记(未完待续)

1.客户/服务器网络介绍: 1.1基本客户端: # -*-coding:utf-8-*- import socket, sys #端口 port = 70 #IP或者域名 host = sys.ar...
  • u013055678
  • u013055678
  • 2016-10-18 19:52:48
  • 1487

Python网络编程 第三版

  • 2017年01月13日 14:05
  • 3.71MB
  • 下载

Python网络编程基础

TCP和UDP套接字通信的特点 TCP客户端与服务器 UDP客户端与服务器
  • jinglong_mydog
  • jinglong_mydog
  • 2017-04-19 16:27:26
  • 294

python网络编程第3版pdf

  • 2018年02月05日 14:53
  • 60.16MB
  • 下载

Python网络编程 第三版 高清完整.pdf版下载

  • 2017年10月20日 16:40
  • 76.66MB
  • 下载

Python网络编程第三版(中文PDF+源码打包)

  • 2018年02月04日 21:57
  • 61.56MB
  • 下载

Python网络编程第三版(中文版)高清

  • 2018年01月01日 07:51
  • 60.89MB
  • 下载

python网络编程(socket)

网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的? 答案就是socket.socket翻译为套接字,它本质就是在应用层和传输层(TCP/IP协议族通信)之间的一个抽象层,是一组接口,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。 课程包括OS模型,TCP/IP协议,socket函数等
  • 2017年03月03日 17:46

python网络编程书籍和配套代码

  • 2016年07月21日 17:20
  • 22.93MB
  • 下载
收藏助手
不良信息举报
您举报文章:Python网络编程笔记
举报原因:
原因补充:

(最多只允许输入30个字)