网络编程基础上

网络编程基础

  • 概述

计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

  • 什么是网络?

简单来说,网络就是一种辅助双方或者多方连接在一起的工具。

  • 使用网络的目的

    1、传播交流信息、数据交换、通信。

    2、为了让在不同的电脑上运行的软件之间能够相互传输数据,就需要借助网络的功能。

1 TCP/IP协议

TCP/IP 是用于因特网 (Internet) 的通信协议。 TCP/IP 通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信。

  • 协议可以理解为一个规定,就像我们之前所说的国际通用的语言为英语。

  • 那么类比到计算机领域,计算机网络沟通语言是什么?

  • 计算机都遵循的网络通信协议就叫做TCP/IP协议。

  • 历史:

    • 早期的计算机网络,各计算机厂商各自规定一套协议,比如IBM、Apple等都有各自的网络通信协议,互不兼容,谁也不服谁,导致只有相同品牌的计算机才能够进行通信交流。

    • 为了把世界上所有不同类型的计算机都连接起来,就必须规定一套全球通用的网络通信协议。

    • 为了实现互联网这个目标,互联网协议簇就随之发展而成,互联网协议簇就是通用协议标准。

    • 因为互联网协议包含了很多种协议标准,并不仅仅只是TCP和IP协议,只是这两个相对来说非常重要,所以互联网通信协议也就简称TCP/IP协议。

2 Ip地址的介绍

IP是整个TCP/IP协议族的核心,也是构成互联网的基础

IP 地址就是标识网络中设备的一个地址。通过IP地址能够找到网络中某台设备。

  • IP地址分为两类:IPv4和IPv6

  • IPv4 是目前使用的IP地址

  • IPv6 是未来使用的IP地址

  • IPv4 是由点分十进制组成

  • IPv6 是由冒号十六进制组成

查看IP地址

  • Linux 和 mac OS 使用ifconfig这个命令

  • Windows 使用ipconfig这个命令

通俗理解:

IP地址就好像电话号码(地址码):有了某人的电话号码,你就能与他通话了。同样,有了某台主机的IP地址,你就能与这台主机通信了,而且IP地址是唯一的。

3 端口和端口号

  • 端口的作用就是给运行的应用程序提供传输数据的通道。

  • 端口号

  • 操作系统为了统一管理这么多端口,就对端口进行了编号,这就是端口号,端口号其实就是一个数字,好比我们现实生活中的门牌号。

  • 应用程序进行数据通信的流程

    • 首先通过IP地址找到对应的设备

    • 然后通过端口号找到对应的端口

    • 然后通过端口把数据传输给应用程序

  • 端口号的分类

    • 知名端口(0 - 1023)

      • 众所周知的端口号。

      • 这些端口固定分配给一些服务,比如21端口分配给FTP(文件传输协议)服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务。

    • 动态端口(1024 - 65535)

      • 一般程序员开发应用程序使用的端口号称为动态端口号。

      • 当运行一个程序默认会有一个端口号,当这个程序退出时,所占用的这个端口号就会被释放。

4 什么是Socket

  • Socket(简称套接字)是进程间通信的一种方式。

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

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

4.1 创建socket

python中使用socket模块的函数socket就可以完成。

该函数带有两个参数:

  1. adderss family:可以选择AF_INET(用于internet进程间通信)或者AF_UNIX(用于同一台机器进程间通信)

  2. Type:套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议)或者SOCK_DGRAM(数据报套接字,主要用于UDP协议)

创建一个udp socket(udp套接字)
import socket
​
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
创建一个tcp socket(tcp套接字)
import socket
​
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

4.2 udp介绍

udp是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或和目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

  • 特点

    1. 无需建立链接,数据到达后也无需确认

    2. 不可靠交付

  • 适用场景

    • 通常用于可靠性较高的网络环境(局域网)或不要求可靠传输的场合

    • 也常用于客户机/服务器模式中。

  • 举例

    • 网络游戏

    • 直播

    • 音视频传输

6.3 tcp 介绍

tcp是一种面向连接的、可靠的、基于字节流的通讯协议。

  • 特点

    1. 面向连接,提供了可靠的建立连接和拆除连接的方法

    2. 可靠交付

  • 适用场景

    • TCP常用于不可靠的互联网中为应用程序提供面向连接的,可靠的,端到端字节流服务。

  • 举例

    • 远程控制

    • 邮件

    • 点对点文件传输

接下来,我创建了一个简易版的交互

首先是创建了一个服务端对象

import socket

# 创建服务器的socket的对象创建服务器的socket的对象
import time

tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定ip和端口
# 以元组的形式绑定
tcp_server_socket.bind(("", 8899))

# 设置监听,客户端连接需要排队
tcp_server_socket.listen(128)

# 接受客户端发过来的数据
# server_client_socket为客户端发送过来的消息
# ip_port为客户的ip地址,以及客户的端口
server_client_socket, ip_port = tcp_server_socket.accept()
print("客户端的端口", ip_port)

# 接受客户端发过来的字节大小限制 接受数据的大小,单位是字节
recv_data = server_client_socket.recv(1024)

# 获取并打印数据的长度
recv_data_length = len(recv_data)
print("接收到的数据的长度为:", recv_data_length)

# 对接收到的数据内容进行解码
recv_content = recv_data.decode("utf-8")
print(f"接收到的客户端的消息:{recv_content}")

# 发送数据给客户端
send_data = "我已收到数据,正在处理...".encode("utf-8")
server_client_socket.send(send_data)

# 关闭服务端与客户端的套接字,终止和客户端的通信
server_client_socket.close()

# 关闭服务端与客户端的服务
tcp_server_socket.close()

其次,建立了一个客户端对象

import socket

# 创建客户端的套接字对象
import time

tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 和服务端的套接字进行连接
# 如果不传入这个ip地址,他会默认成为我们自己的客户端地址
tcp_client_socket.connect(("这里填写自己的ipv4地址", 8899))

# 发送数据
send_data = "Hello,server,i am client".encode("utf-8")
tcp_client_socket.send(send_data)


# 接受服务器发送过来的数据
recv_data = tcp_client_socket.recv(1024)
print(recv_data)

recv_content = recv_data.decode("utf-8")
print(f"接收到服务器的数据:{recv_content}")

输出结果为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值