博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习的第32天网络编程part2
阅读量:5159 次
发布时间:2019-06-13

本文共 2446 字,大约阅读时间需要 8 分钟。

一、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接收的最大字节数bytesprint('收到客户的数据',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.绑定端口和ips.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()

 

转载于:https://www.cnblogs.com/ye-hui/p/9905778.html

你可能感兴趣的文章
基本算法概论
查看>>
jquery动态移除/增加onclick属性详解
查看>>
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
PAT L2-016 愿天下有情人都是失散多年的兄妹
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
邮件和短信验证码
查看>>