python学习的第32天网络编程part2

一、IP和ARP协议(了解)

以太网协议:

(1)一组电信号称为一组数据报或一组数据帧

(2)但凡接入互联网的煮鸡,必须有一块独一无二的网卡

(3)所有的数据报都必须分为报头和数据两部分。报头固定18个字符

IP协议:

  • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
  • 范围0.0.0.0-255.255.255.255
  • 一个ip地址通常写成四段十进制数,例:172.16.10.1

ip地址分成两部分

  • 网络部分:标识子网
  • 主机部分:标识主机

注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网

例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网

2、ARP协议

作用:以广播的方式发送数据包,获取目标主机的mac地址

二、套接字socket

1、socket是什么?
翻译过来称为套接字,是对底层的 TCP IP UDP 等网络协议进行封装,使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议
在程序员的言论,他就是一个封装好的模块!要完成网络通讯,只需要使用系统提供的socket模块就行

2、TCP和UDP是传输层最常见的协议,主要控制传输数据的方式。(传输层)

TCP:
传输方式:通过三次握手来与服务器建立连接,

优点:可以保证数据的完整性

比如:a机器给b机器发送数据包 要求b机器必须立即返回一个确认包,a机器会等待一段时间,如果超时还没有收到确认,则重发数据
缺点:传输效率低
使用场景: 文字聊天,支付宝转账等,

UDP:
传输方式:不需要建立连接,直接发送
缺点: 不能保证数据的完整性
优点:传输效率比TCP高
使用场景:视频通话,语音通话,UDP

python中的socket

在使用socket的时候用户需要关心的是 ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data

在写网络编程的时候,必然是有两台代码,对应着客户端和服务器

使用socket来完成TCP通讯
应该先完成服务器的代码编写

3、TCP的服务端:

import socket

#1.买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式协议,
print(phone) #是用来接收链接请求,从而建立链接的

#2.插手机卡
phone.bind(('127.0.0.1',8080)) #0-65535

#3.开机
phone.listen(5) # 同一时刻最大请求数为5个

print('start....')
#4.等待电话请求
conn,client_addr=phone.accept() #(双向链接的套接字对象,存放客户端ip和端口的小元组)
# print(conn) # conn代表双向链接,用来收发消息
# print(client_addr)

#5.收\发消息
data=conn.recv(1024) #1024接收的最大字节数bytes
print('收到客户的数据',data)
conn.send(data.upper())

#6.挂电话链接
conn.close()

#7.关机
phone.close()

4、TCP的客户端

import socket

#1.买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式协议,

#2.拨号
phone.connect(('127.0.0.1',8080))

#3.发\收消息
phone.send('hello'.encode('utf-8')) # 只能发bytes类型
data=phone.recv(1024)
print('收到服务端的消息: ',data)

#4.挂电话链接
phone.close()

5、UDP的服务器

import socket
# 1.创建socket对象
s = socket.socket(type=socket.SOCK_DGRAM)

# 2.绑定端口和ip
s.bind(("127.0.0.1",10000))

while True:
    # 3.接受数据
    res = s.recv(1024)
    print(res)

while True:
    msg = input(">>>:")
    # 需要获取对方的ip和端口
    #s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000))

# 关闭资源
s.close()

6、UDP的客户端

import socket
# 1.创建socket对象
c = socket.socket(type=socket.SOCK_DGRAM)
while True:
    msg = input(">>>:")
    c.sendto(msg.encode("utf-8"),("127.0.0.1",10000))

c.close()

7、TCP的通信循环和链接循环的客户端

from socket import *

server = socket(AF_INET, SOCK_STREAM)
server.bind(('127.0.0.1', 7500))
server.listen(5)
while True:
    while True:
        conn, client = server.accept()
        data = conn.recv(1024)
        conn.send(data)

    conn.close()

server.close()

猜你喜欢

转载自www.cnblogs.com/ye-hui/p/9905778.html
今日推荐