【Python】 Python网络编程概论 + UDP初步

网络编程概论

Socket是计算机之间进行网络通信的一套程序接口.目前,Socket编程已经成为了网络编程的标准,计算机之间通信都必须遵守Socket接口的相关要求.

Socket对象是网络通信的基础,字相当于一个管道连接了发送端和接收端,并在两者之间互相传递数据.Python对Socket进行了二次封装,简化了程序开发步骤,大大提高了开发的效率.

在网络通信模型中,需要两个重要的信息才能完成数据的传输:IP地址和端口号. 在接收端,主机负责接收所有发给自己的数据包,并将这些数据放到操作系统的数据传输线上,再由相应的应用程序在传输线上根据端口号分别拿取各自所需要的数据. 这要求应用程序在数据到达之前就必须在线路上进行等待.

一旦传输总线上有数据到达,这些应用程序会按照数据包上的端口标示分别拿取自己的数据.但是如果数据到达传输总线时,相应的应用程序还没有启动,那么该数据将被操作系统丢弃.

上面的内容说明:

①网络数据包中需要有接受者的信息,即IP地址和端口号

②接收者必须在数据到达前,做好接收数据的准备

③不同的应用程序,依靠不同的端口号来识别自己的数据.

TCP/IP协议簇简介

实际上,数据在Internet上传输时经过了很多的处理,这些处理包括在你发送的消息填上对方的地址,打包和转换为电信号等一系列的过程. 接收方又将电信号转换为数据包,再拆包,最终看到发送的原始信息.

这些复杂的过程是通过TCP/IP协议簇来完成的,它包含了一系列网络通信的基础协议.每个协议完成不同的功能.

在TCP/IP参考模型中总共分为5层:

应用层,传输层,网络层,数据链路层 和 物理层

在通信时只有同一层的硬件或软件才能互相识别数据,也就是说应用层只和应用层进行对话,不会发生一边是应用层而另一边是传输层的对话.

在TCP/IP参考模型中,IP地址是网络层的要素,端口是应用层的要素.

数据在经过每一层的时候,都会被加入一些额外的信息.这些信息被称为头部.加入头部的过程被称为数据的封装.

传输层会加入一个TCP头部(包含端口号)

网络层会加入IP头部

数据链路层会加入帧头部和尾部

数据链路层的作用就是负责将数据从链路的一端传到链路的另一端.

UDP网络编程初步

在网络中有两种传输数据的方式,不会出现数据丢失的是TCP传输,会发生数据丢失的是UDP传输.

大多数情况下,网络中使用可靠的TCP.

为了通信,发送端和接收端都必须创建Socket对象.发送端利用Socket发送数据到网络上,接收端从Socket上读取数据,然后用Print函数显示在屏幕上.

接收端代码

import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(("",15001))
data,addr = s.recvfrom(1024)
print(data)
s.close()

发送端代码

import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.sendto((‘Hello!!‘).encode(),(‘192.168.1.224‘,15001))
s.close()

代码解释

发送端

socket模块包含了进行网络通信时所需要的各种功能函数,它把复杂的网络通信过程进行了封装,极大地简化了开发的难度,提高了开发效率.

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

创建一个socket对象,两个参数:

第一个表示协议族family.

第二个表示协议类型type.

函数的返回值 是一个socket对象.若对象创建成功,则可以利用s来进行数据的发送和接收.

sendto()是发送数据的函数.第一个参数是需要发送的字符串,第二个参数是一个元组,第一个元素是IP地址,第二个是端口.

接收端

调用socket时应该使用相同的参数.

bind()函数用来将socket绑定到指定的端口.bind()函数有两个参数,第一个是IP地址,第二个是端口.第一个参数可以使用空字符串,表示使用本机的任何可用IP.第二个参数使监听端口.

在网络通信中,计算机的一个端口只能被1个应用软件使用,可用的端口范围是1-65536.其中1-1024中的端口大多被操作系统和常用软件使用.

recvfrom()函数用来接收网络中的数据.必须在bind()函数之后调用.两者结合起来就是在指定的端口进行监听.

recvfrom()的第一个返回值是接收到的数据,第二个返回值是发送方的IP地址.

recvfrom()有1个参数,用来指定接收缓冲区的大小.

发送端也称为客户端,接收端也称为服务器端.

UDP函数介绍

socket

socket第一个参数:

socket.AF_INET IPv4

socket.AF_INET6 IPv6

socket第二个参数

SOCK_STREAM TCP协议

SOCK_DGRAM UDP协议

sendto

socket.sendto(string,address)

发送字符串string到address指定的主机里.

recvfrom

socket.recvfrom(bufsize)

从网络上接收UDP数据包,并将接收到的数据存放到bufsize定义的内存空间里面.如果bufsize的值小于接收到的数据包的大小,那么数据将会溢出.

时间: 2024-09-30 06:33:49

【Python】 Python网络编程概论 + UDP初步的相关文章

【Python】网络编程

1.TCP编程 2.SocketServer模块 3.Twisted框架 4.UDP编程 1.TCP编程--TCP是面向连接的,其一般的设计如下: # encoding:utf-8 ''' Created on 2014-6-20 @author: Administrator ''' from socket import socket, AF_INET, SOCK_STREAM import time import threading class SockServer(object): def

python基础网络编程--转

python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问题,网

linux网络编程笔记——UDP

目前这部分代码会出现阻塞问题,暂时尚未解决 #include "udp.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <malloc.h> #include <sys/types.h> #include <sys/socket

Java网络编程(UDP程序设计)

//客户端 package org.udp; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPClient { public static void main(String[] args) throws Exception{ DatagramSocket ds = null; byte[] buf = new byte[2014]; DatagramPacket dp = null;

Python Socket 网络编程

Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ 聊天.收发 email 等等.要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,就有了通信的基础了. 本文主要介绍使用 Python 进行 TCP Socket 网络编程,假设你已

python ==》 网络编程

 一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层模型 互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 学习socket一定要先学习互联网协议: 1.首先:本节课程的目标就是教会你如何基于socket编程,来开发一款自己的C/S架构软件 2.其次:C/S架构的软件(软件属于应用层)是基于网络进行通信的 3.然后:网络的核心

python之网络编程

14.1.1 socket模块 在网络编程中德一个基本组件就是套接字.套接字主要是两个程序之间的信息通道. 套接字包括两个:服务器套接字和客户机套接字.创建一个服务器套接字后,让它等待连接.这样它就在某个网络地址处监听. 一个套接字就是一个socket模块中socket类的实例.它的实例化需要3个参数:第一个参数是地址族(默认是socket.AF_INET);第2个参数是流(socket.SOCK_STREAM,默认值)或数据报(socket.SOCK_DGRAM)套接字.第三个参数是使用的协议

Python 之 网络编程——SOCKET开发

一.预备知识 对于我们,主要掌握5层协议就行. 物理层: 转成二进制数序列数据链路层: 形成统一的协议:Internet协议 包括数据头(18个字节,前6个字节原地址,中间6个字节为目标地址,后6个字节为数据的描述)和数据网络层: 有IP协议,包括IP头和数据传输层: 包括tcp.UDP两个协议:基于端口(0-65535)的协议应用层: 包括http.ftp协议 TCP协议:流式协议,先把管道修好 客户端   服务端 C-------------------------------->S   <

Python学习---网络编程 1217[all]

OSI七层模型: 物理层, 数据链路层, 网络层,传输层,会话层,表达层,应用层 应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 传输层:TCP,UDP 网络层:IP,ICMP,OSPF,EIGRP,IGMP 数据链路层:SLIP,CSLIP,PPP,MTU [图片来自网络] 网络通信要素: A:IP地址    (1) 用来标识网络上一台独立的主机 (2) IP地址 = 网络地址 + 主机地址(网络号:用于识别主机所在的网络/网段.主机号:用于识别该网络中的主