弟12章 网络编程

这篇具有很好参考价值的文章主要介绍了弟12章 网络编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网络协议概述 p164

ipv4:十进制点分制
ipv6:十六进制冒号分隔

弟12章 网络编程,python,网络,python


弟12章 网络编程,python,网络,python


弟12章 网络编程,python,网络,python

TCP协议与UDP协议的区别 p165

tcp协议的三次握手:
弟12章 网络编程,python,网络,python

udp协议:又称为用户数据包协议(User Datagram Protocol),它是面向无连接的协议,只要知道对方的ip地址和端口,就可以直接发送数据包,由于是面向无连接的,所以无法保证数据一定会到达接收方

tcp比喻成打电话,udp比喻成发短信

tcp和udp都是传输层的协议


什么是端口号?
区分计算机中的运行的应用程序的整数
端口号的取值范围是0到65535,一共65536个,其中80这个端口号分配给HTTP服务,21这个端口号分配给了FTP服务,1433是分给了SQL server数据库


TCP和UDP的区别

TCP协议 UDP协议
连接方面 面向连接的 面向无连接
安全方面 传输可靠不丢失,不丢失,按顺序到达 无法保证不丢包
传输效率方面 传输效率相对较低 传输效率高
连接对象数量方面 只能点对点 一对一 支持一对一,一对多,多对多的交互通信

socket简介

描述ip地址和端口号

弟12章 网络编程,python,网络,python


socket对象的常用方法

方法名称 功能描述
bind((ip,port)) 绑定ip地址和端口
listen(N) 开始TCP监听,N表示操作系统挂起的最大连接数量,取值范围1-5之间,一般设置为5
accept() 被动接收TCP客户端连接,阻塞式,返回一个元组,分别是客户端socket和客户端地址
connect((ip,port)) 主动初始化TCP服务器连接
recv(size) 接收TCP数据,返回值为字符串类型,size表示要接收的最大数据量
send(str) 发送tcp数据,返回值是要发送的字节数量
sendall(str) 完整发送tcp数据,将str中的数据发送到连接的套接字,返回之前尝试发送所有数据,若成功为None,失败抛出异常
recvfrom() 接收udp数据,返回值是一个元组(data,address),data表示接收的数据,address表示发送数据的套接字地址
sendto(data,(ip,port)) 发送udp数据,返回值是发送的字节数
close() 关闭套接字

TCP服务器端代码的编写 p166

TCP服务器端流程

1、使用socket类创建一个套接字对象
2、使用bind((ip,port))方法绑定ip地址和端口号
3、使用listen()方法开始TCP监听
4、使用accept()方法等待客户端的连接
5、使用recv() / send() 方法接收和发送数据
6、使用close() 关闭套接字

代码示例:

from socket import socket,AF_INET,SOCK_STREAM
# AF_INET用于internet之间的进程通信
# SOCK_STREAM表示TCP协议

# 1、创建socket模块
server_socket=socket(AF_INET,SOCK_STREAM)
# print(type(server_socket)) # <class 'socket.socket'>

# 2、绑定ip地址和端口
ip='127.0.0.1' # 表示连接本机
port=8888 # 不要和已有的指定端口冲突,比如sql服务的port是3306
server_socket.bind((ip,port)) # bind参数是一个元组

# 3、使用listen()开始监听
server_socket.listen(5)
print('服务器已启动(客户端连接成功后,服务器的代码才会向下执行)')

# 4、等待客户端的连接
client_socket,client_addr=server_socket.accept() # accept方法返回一个元组类型,通过系列解包赋值分别赋值给左边
print(type(client_socket))
print(type(client_addr))

# 5、接收来自客户端的数据
data=client_socket.recv(1024) # 返回值是一个字符串类型,最大值为1024
print('客户端发送过来的数据为:',data.decode('UTF-8'))

# 6、关闭socket
server_socket.close()

TCP客户端代码的编写 p167

TCP客户端流程

1、使用socket类创建一个套接字对象
2、使用connect((host,port))设置连接的主机ip和主机设置的端口
3、使用 recv() / send() 方法接收/发送数据
4、使用close()关闭套接字

本电脑上已经有一个project在运行服务器端代码。
此时需要新建一个项目代表另一台电脑,去跑客户端代码。


右上角 FIle ,然后 new project

弟12章 网络编程,python,网络,python

然后设置新project的路径

弟12章 网络编程,python,网络,python

然后选择新窗口打开,从而运行了两个Pycharm
弟12章 网络编程,python,网络,python

代码示例:

import socket

# 1、创建socket对象
client_socket=socket.socket() # 服务器端要加参数,客户端不需要

# 2、通过ip和port连接服务器
ip='127.0.0.1'
port=8888
client_socket.connect((ip,port))
print('客户端和服务器端的连接建立成功')

# 3、发送数据
client_socket.send('welcome to Python world'.encode('UTF-8'))
# client_socket.send('welcome to Python world') 不能直接发送发送字符串 TypeError: a bytes-like object is required, not 'str'
# 4、关闭
client_socket.close()
print('发送成功')

主机和客户端的通信流程

弟12章 网络编程,python,网络,python

tcp多次通信服务器端代码 p168

import socket # 这么写的话就要写socket模块名 from...import不需要写模块名

# 1、创建socket对象
server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2、绑定主机ip和port
server_socket.bind(('127.0.0.1',8888))

# 3、开始监听 最大监听数量设置为5
server_socket.listen(5)

# 4、开始等待客户端的tcp连接
client_socket,cliet_addr=server_socket.accept()

# 5、接收数据
info=client_socket.recv(1024).decode('UTF-8') # 服务器端接收数据时要从client端socket去接
while info!='bye':
    if info:
        print('接收到的数据为:',info)
    # 准备回复的数据
    data=input('请输入要回复的数据:')
    client_socket.send(data.encode('UTF-8')) # 发数据也是从client端去发
    if data=='bye':
        break

    info = client_socket.recv(1024).decode('UTF-8')

# 关闭两个socket对象
client_socket.close()
server_socket.close()

TCP多次通信客户端代码 p169

import socket

# 1、创建socket对象
client_socket=socket.socket() # 客户端这边不需要加参数:AF_INET,SOCK_STREAM这些参数,只有服务器端要加

# 2、连接主机的ip和port
ip='127.0.0.1'
port=8888
client_socket.connect((ip,port)) # 注意参数是个元组
print('与服务器端建立连接')

# 3、客户端先发送数据
info=''
while info!='bye':
    send_data=input('请输入客户端要发送的数据:')
    client_socket.send(send_data.encode('UTF-8'))

    if send_data=='bye':
        print('客户端发起结束')
        break

    info=client_socket.recv(1024).decode('UTF-8')
    print('收到服务器的响应数据:',info)

client_socket.close()

UDP的一次双向通信 p170

udp协议是面向无连接的,只要知道对方的ip和端口号就可以发送数据包,但是不保证数据包能一定送达

udp通信模型

弟12章 网络编程,python,网络,python

udp接收方代码

# udp接收方的代码
import socket

# 1、创建socket对象
recv_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 2、绑定ip地址和端口
recv_socket.bind(('127.0.0.1',8888))

# 3、接收来自发送方的数据
recv_data,addr=recv_socket.recvfrom(1024) # 注意返回对象是一个元组,系列解包赋值
print('-'*66)
print('接收到的数据为:',recv_data.decode('UTF-8'))
print('接收数据来自:',addr) # 接收数据来自: ('127.0.0.1', 59661)
print('-'*66)

# 4、准备回复对方的数据
data=input('请输入要回复的数据:')

# 5、回复
recv_socket.sendto(data.encode('UTF-8'),addr)

# 6、关闭
recv_socket.close()

udp发送方的代码

# UDP发送方的代码
import socket
'''
AF_INET 表示网络间通信

SOCK_STREAM 表示TCP
SOCK_DGRAM  表示UDP
'''

# 1、创建socket对象
send_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 2、准备发送数据
data=input('请输入要发送的数据:')

# 3、指定接收方的ip和port
ip_port=('127.0.0.1',8888)

# 4、发送数据
send_socket.sendto(data.encode('UTF-8'),ip_port)

# 5、接收来自接收方的数据
recv_data,addr=send_socket.recvfrom(1024) # 注意recvfrom返回的是一个元组,使用解包赋值
print('-'*66)
print('接收到的数据为:',recv_data.decode('UTF=8'))
print('接收数据的地址为:',addr)
print('-'*66)

# 6、关闭socket对象
send_socket.close()

模拟客服咨询小程序 p171

模拟udp编程

客服代码

# 客服人员
import socket

recv_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

recv_socket.bind(('127.0.0.1',8888)) # 注意入参是一个元组

while True:
    recv_data,addr=recv_socket.recvfrom(1024) #返回值是一个元组类型,系列解包赋值
    recv_string=recv_data.decode('UTF-8')
    print('客户说:',recv_string)
    print('客户地址:',addr)

    if recv_string=='bye':
        print('服务器端即将推出')
        break

    # 服务器端回复客户端数据
    data=input('回复什么给客户端:')
    recv_socket.sendto(data.encode('UTF-8'),addr) # 注意udp发送数据接口为sendto,参数2为addr


recv_socket.close()

客户代码

# 客户咨询者
import socket

send_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # udp协议收发数据都要加参数 tcp协议收发数据只有服务器端代码要加参数

while True:
    data=input('客户说:')
    send_socket.sendto(data.encode('UTF-8'),('127.0.0.1',8888))

    if data=='bye':
        print('客户端发起结束')
        break

    recv_data,addr=send_socket.recvfrom(1024)
    print('客户端接收数据:',recv_data.decode('UTF-8'))
    print('服务器端地址:',addr)

send_socket.close()

本章总结及习题 p172

网上聊天软件一般是udp

QQ采用的通信协议以UDP为主,辅以TCP协议。

windows系统查看端口号对应的进程pid

看这个文章来源地址https://www.toymoban.com/news/detail-809369.html

到了这里,关于弟12章 网络编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【python】网络编程

    IP地址 IP地址就是表示网络中设备的一个地址 IP的表现形式 IPV4 点分十进制形式 IPV6 冒号十六进制组成 查看IP地址 Linux使用ifconfig命令 Windows使用ipconfig命令 查看网络是否能够运行 ping ip 检查本地是否能够通信 域名 是ip地址的别名 端口 是数据传输的通道,是数据传输的必经之

    2024年02月01日
    浏览(20)
  • Python 网络编程

    Python 提供了两个级别访问的网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统 Socket 接口的全部方法。 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。 Socket又称\\\"套接字\\\",应用程序

    2024年02月14日
    浏览(24)
  • 网络编程(python)

    IP地址 :标识网络中设备的一个地址 ping可以检查网络, ping www.baidu.com 可以查看百度网址的IP,网页搜索ping出来的这个IP也同样可以进入百度网页,网页搜索网址,实际上是搜索IP,只不过使用了URL网页网址(如www.baidu.com)封装,方便记忆搜寻,www.baidu.com相比一串数字(11

    2023年04月20日
    浏览(17)
  • Python Socket网络编程

    目录 Socket概念 Python Socket编程 发送接收缓冲  消息格式定义  Socket套接字,一种独立于协议的网络编程接口,就是对网络中不同主机上的应用进程之间进行双向通信的端点。 TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket)。 IP层

    2024年02月07日
    浏览(31)
  • Python中的网络编程Socket与HTTP协议的实践【第158篇—网络编程】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在当今互联网时代,网络编程是程序员不可或缺的一项技能。Python作为一种高级编程语言,提供了丰富的网络编程库,使得开发者能够轻松地

    2024年04月09日
    浏览(76)
  • Python中常用网络编程模块

    网络由下往上分为:物理层、数据链路层、网络怪、传输层、会话层、表示层和应用层。 TCP/IP协议是传输层协议,主要解决数据如何在网络中传输;socket则是对TCP/IP协议的封装,它本身不是协议,而是一个调用接口; HTTP、FTP是应用协议,主要解决如何包装数据; TCP连接的三

    2024年03月19日
    浏览(22)
  • python网络编程之websocket

    我们知道一般我们的请求都是http请求,由客户端发起,然后待服务端返回数据之后,这一个请求就结束了。但是,有些情况下,服务端需要主动给客户端发消息(比如推送一些消息),服务端与客户端需要进行双向交流,此时,http就显得有些无能为力了。所以就有了全双工

    2024年02月10日
    浏览(33)
  • 网络编程与自动化(python)

    传统网络运维困境 大家在日常的网络运维中是否遇到过如下问题: 设备升级:现网有数千台网络设备,你需要周期性、批量性地对设备进行升级。 配置审计:企业年度需要对设备进行配置审计。例如要求所有设备开启sTelnet功能,以太网交换机配置生成树安全功能。你需要快

    2024年02月09日
    浏览(28)
  • Python网络编程之UDP协议

    Hello,大家好。本期来和大家一起学习一下网络编程UDP的相关知识。 ip ip地址:用来在网络中标记一台电脑,在本地局域网上是唯一的。 查看电脑ip地址:ipconfig(win)/ifconfig(linux/mac) 端口 端口:设备与外界通讯交流的出口 一共有65536个(0 - 65535) 端口 知名端口是众所周知的

    2024年02月03日
    浏览(28)
  • 深入Python网络编程:从基础到实践

    Python,作为一种被广泛使用的高级编程语言,拥有许多优势,其中之一就是它的网络编程能力。Python的强大网络库如socket, requests, urllib, asyncio,等等,让它在网络编程中表现优秀。本文将深入探讨Python在网络编程中的应用,包括了基础的socket编程,到高级的异步IO网络编程,以

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包