zoukankan      html  css  js  c++  java
  • Python学习-网络编程

    @

    引言

    计算机网络是学习编程的基础四大件,而网络协议则是计算机网络的基础

    TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别。

    网络

    网络编程就是通过程序使不同主机上的软件能够通过网络进行通信

    IP

    ip是用来在网络中标记一台电脑的地址,在本地局域网内是唯一的。

    端口

    一台电脑有一个ip,但是一台电脑上有多个软件,怎么识别到不同软件进行通信,这时就需要端口,每个软件的端口在本地主机上都是唯一的。

    协议

    有了ip有了端口,好比商家有了你家小区的地址,单元号,但是该采用什么快递,怎么确保你收到货这些并没有确定,这时就需要商家-顾客有一个统一的规定对这些内容进行规定,这就是协议

    所以,ip地址+协议+端口 三者结合才可以可以标识网络中的进程,并利用这个标识进行进程之间的通信

    TCP/IP网络模型

    计算机与网络设备要相互通信,双方就必须基于相同的方法。比如

    • 如何探测到通信目标
    • 由哪一边先发起通信
    • 使用哪种语言进行通信
    • 怎样结束通信

    等等都需要事先确定规则。这种规则就是协议(protocol)

    TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。
    在这里插入图片描述

    UDP

    socket(简称 套接字) 是进程间通信的一种方式,通过socket函数,我们可以指定期望的通信协议类型

    函数 socket.socket 创建一个 socket,该函数带有两个参数
    在这里插入图片描述第一个参数指明了协议簇,目前支持5种协议簇,最常用的有AF_INET(IPv4协议)和AF_INET6(IPv6协议)
    在这里插入图片描述
    第二个参数指明套接口类型,主要有种类型可选:SOCK_STREAM(字节流套接口)、SOCK_DGRAM(数据报套接口)和SOCK_RAW(原始套接口)

    下面是UDP客户端和服务器之间通信交互的时间线,相应的代码实现也是根据此框图进行实现
    在这里插入图片描述

    from socket import *
    
    udp_socket = socket(AF_INET, SOCK_DGRAM)
    
    dest_addr = ('192.168.123.1', 8888)
    
    send_data = input('请输入要发送的数据:')
    
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
    
    recv_data = udp_socket.recvfrom(1024)
    
    # 接收到的数据recv_data是一个元组
    # 第1个元素是对方发送的数据
    # 第2个元素是对方的ip和端口
    print(recv_data[0].decode('gbk'))
    print(recv_data[1])
    
    udp_socket.close()
    

    TCP

    TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议

    TCP通信需要经过创建连接、数据传送、终止连接三个步骤

    下面是TCP客户端和服务器之间通信交互的时间线,相应的代码实现也是根据此框图进行实现
    在这里插入图片描述

    from socket import *
    
    tcp_client = socket(AF_INET, SOCK_DGRAM)
    
    server_ip = input('input server ip:')
    server_port = input('input server port:')
    
    tcp_client.connect((server_ip,server_port))
    
    send_data = input('input send data:')
    
    tcp_client.send(send_data)
    
    tcp_client.send(send_data.encode("gbk"))
    
    recvData = tcp_client.recv(1024)
    print('接收到的数据为:', recvData.decode('gbk'))
    
    tcp_client.close()
    
  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/cokefentas/p/14933460.html
Copyright © 2011-2022 走看看