文章目录

  • 一、网络基础
    • 1.1 为什么要使用通信协议
    • 1.2 TCP/IP 简介
    • 1.3 UDP 简介
    • 1.4 Socket 简介
    • 1.41 Python 使用
  • 二、TCP 编程
    • 2.1 创建TCP服务器
    • 2.2 创建TCP客户端
    • 2.3 执行TCP服务器和客户端
  • 三、UDP编程
    • 3.1 服务端
    • 3.2 客户端

一、网络基础

1.1 为什么要使用通信协议

为了把全世界的所有不同类型的计算机都连起来,就必须规定一套全球通用协议,为了实现互联网这个目标。

1.2 TCP/IP 简介

1.3 UDP 简介

相对于TCP,UDP是面向无条件连接的协议,速度更快,但是不可靠。

  1. 为了在给定的主机上能识别多个目的地址,同时允许多个应用程序在同一台主机上工作并能独立地进行数据包的发送和接收,设计用户数据报协议UDP。
  2. UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接数据包传输服务。它不提供报文到达确认、排序、及流量控制等功能。
  3. UDP Helper可以实现对指定UDP端口广播报文的中继转发,即将指定UDP端口的广播报文转换为单播报文发送给指定的服务器,起到中继的作用。

1.4 Socket 简介

所谓Socket就是套接字,套接字就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。
一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口

1.41 Python 使用

s=socket.socket(AddressFamily,type)

  1. AddressFamily:可以选择AF_INET(用于Internet 进程间通讯),或者使用AF_UNIX(用于同一台机器之间通信),实际工作用AF_INET
  2. Type:嵌套字类型,可以使SOCK_STREAM(流式嵌套字,主要用于TCP协议),或者使用SOCK_DGRAM(数据报套接字,主要用于UDP协议)

例如,为了创建TCP/IP套接字,可以使用如下方法调用socket.socket()

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

为了创建UDP/IP套接字,可以使用如下方法调用socket.socket()

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



二、TCP 编程

2.1 创建TCP服务器


#创建一个TCP服务器ss = socket()    #创建服务器套接字ss.bind()           #把地址绑定到套接字上ss.listen()         #监听连接inf_loop:           #服务器无线循环cone,addr = ss.accept()    #接收客户端连接comm_loop:      #通信循环cone.recv()/cs.send()    #对话(接受与发送)cone.close()      #关闭客户端套接字
ss.close()          #关闭服务器套接字(可选)

eg:

# -*- coding:utf-8 -*-
import socket               #导入socket模块
host = '127.0.0.1'          #主机IP
port = 8080                     #端口号
web = socket.socket()           #创建 socket 对象
web.bind((host,port))       #绑定端口
web.listen(5)               #设置最多连接数
print ('服务器等待客户端连接...')
#开启死循环
while True:conn,addr = web.accept()    #建立客户端连接data = conn.recv(1024).decode()      #获取客户端请求数据print(data)             #打印接受数据conn.sendall(b'HTTP/1.1 200 OK\r\n\r\nHello World')     #向客户端发送数据conn.close()            #关闭链接
>>>服务器等待客户端连接...

2.2 创建TCP客户端


import socket       # 导入socket模块
s= socket.socket()  # 创建TCP/IP套接字
host = '127.0.0.1'  # 获取主机地址
port = 8080        # 设置端口号
s.connect((host,port)) # 主动初始化TCP服务器连接send_data = input("请输入要发送的数据:") # 提示用户输入数据
s.send(send_data.encode()) # 发送TCP数据# 接收对方发送过来的数据,最大接收1024个字节
recvData = s.recv(1024).decode()
print('接收到的数据为:',recvData)# 关闭套接字
s.close()
>>>
客户端控制台:
请输入要发送的数据:123
接收到的数据为: HTTP/1.1 200 OK
Hello World服务端控制台:
服务器等待客户端连接...
123

2.3 执行TCP服务器和客户端

服务器


import socket               # 导入socket模块
host = socket.gethostname() # 获取主机地址
port = 12345                # 设置端口号
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建TCP/IP套接字
s.bind((host,port)) # 绑定地址(host,port)到套接字
s.listen(1) # 设置最多连接数量
sock,addr = s.accept() # 被动接受TCP客户端连接
print('连接已经建立')
info = sock.recv(1024).decode() # 接收客户端数据
while info != 'byebye':  # 判断是否退出if info :print('接收到的内容:'+info)send_data = input('输入发送内容:')   # 发送消息sock.send(send_data.encode()) # 发送TCP数据if send_data =='byebye':  # 如果发送exit,则退出breakinfo = sock.recv(1024).decode() # 接收客户端数据
sock.close() # 关闭客户端套接字
s.close()    # 关闭服务器端套接字

客户端

import socket       # 导入socket模块
s= socket.socket()  # 创建TCP/IP套接字
host = socket.gethostname() # 获取主机地址
port = 12345        # 设置端口号
s.connect((host,port)) # 主动初始化TCP服务器连接
print('已连接')
info = ''
while info != 'byebye':  # 判断是否退出send_data=input('输入发送内容:')    # 输入内容s.send(send_data.encode()) # 发送TCP数据if send_data =='byebye': # 判断是否退出breakinfo = s.recv(1024).decode() # 接收服务器端数据print('接收到的内容:'+info)
s.close() # 关闭套接字

三、UDP编程

3.1 服务端

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #创建UDP套接字
s.bind(('127.0.0.1', 8888)) # 绑定地址(host,port)到套接字
print('绑定UDP到8888端口')
# 接收数据:
data, addr = s.recvfrom(1024)
data = float(data)*1.8 + 32 # 转化公式
send_data = '转换后的温度(单位:华氏温度):'+str(data)
print('Received from %s:%s.' % addr)
s.sendto(send_data.encode(), addr) # 发送给客户端
s.close()    # 关闭服务器端套接字

3.2 客户端


import socket # 导入socket模块s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)        #创建UDP套接字
data = input('请输入要转换的温度(单位:设置度):')     #输入要转化的温度
s.sendto(data.encode(), ('127.0.0.1', 8888))               # 发送数据
print(s.recv(1024).decode()) # 打印接收数据:
s.close() # 关闭套接字

Python学习十:网络编程相关推荐

  1. Python学习笔记:网络编程

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  2. python学习(九) 网络编程学习--简易网站服务器

    python `网络编程`和其他语言都是一样的,服务器这块步骤为: `1. 创建套接字` `2. 绑定地址` `3. 监听该描述符的所有请求` `4. 有新的请求到了调用accept处理请求` Pyt ...

  3. golang学习十:网络编程

    文章目录 一.网络协议: 1. 典型协议: 2.分层模型: 2.1 网络分层架构: 2.2 层与协议: 2.3 通信过程 2.4 总结通信过程: 二.Socket编程: 1.什么是Socket: 2. ...

  4. python学习之网络编程

    一.socket模块socket模块提供了底层的接口,通过socket模块可以实现不同计算机的通信ip+port定位了计算机中应用程序的具体位置,socket绑定ip+port来建立链接,socket ...

  5. python的网络编程学什么_【Python学习】网络编程

    1 # 1.发get请求 2 import requests 3 url = 'http://api.nnzhp.cn/api/user/stu_info' 4 data = {'stu_name': ...

  6. Python学习之面向对象编程

    Python学习目录 在Mac下使用Python3 Python学习之数据类型 Python学习之函数 Python学习之高级特性 Python学习之函数式编程 Python学习之模块 Python学 ...

  7. python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...

    Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...

  8. Python四大主流网络编程框架

    目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实.但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Pytho ...

  9. python网络编程攻略-Python四大主流网络编程框架

    目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实.但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Pytho ...

  10. 您所应了解的Python四大主流网络编程框架

    本文内容摘录自<Python高效开发实战--Django.Tornado.Flask.Twisted>一书.该书分为三部分:第1部分是基础篇,带领初学者实践Python开发环境和掌握基本语 ...

最新文章

  1. SpringMVC @autowrid注入空指针
  2. 学懂分析,玩转大数据
  3. 超强NLP思维导图,知识点全面覆盖:从基础概念到最佳模型,萌新成长必备资源...
  4. C#几种在客户端跳转
  5. 执行计划oracle中cost,执行计划中cost计算方法
  6. Head First设计模式读书笔记三 装饰模式(个人理解:包装模式)
  7. mysql排插问题_手把手教你分析 MySQL 死锁问题
  8. BAPI:KBPP_EXTERN_UPDATE_CO, TCODE:CJ30/CJ40 第二部分
  9. LeetCode(1108)——IP 地址无效化(JavaScript)
  10. encodeURIcomponent编码和ASP.NET之间编码转换
  11. 数据库安全之Mysql数据库安全加固
  12. 人脸方向学习(二十一):Face Landmark Detection-FAB-解读
  13. 用js解析经json序列化后的C#的DateTime类型数据
  14. 简单的方法完成项目上传到github
  15. XMLSpy入门实验---第一个XML
  16. word文档 批量添加上标、下标
  17. window8系统激活工具
  18. c语言窗口插入图片,c语言添加图片Word版
  19. 如何将卫星影像或者航拍影像叠加到CAD设计图上(Auto CAD版)
  20. 多个Ajax请求成功后再执行后续方法

热门文章

  1. python怎么弄成白色背景_python – 在matplotlib中为colorbar添加白色背景
  2. 【iOS】—— KVC与KVO
  3. 【Win10 UWP】微信SDK基本使用方法和基本原理
  4. 计算机输入开机密码无法进入,电脑开机无法输入密码怎么办
  5. 骨传导耳机推荐,列举几款骨传导主流的耳机分享
  6. 这世上,真有人会陪你手握屠龙刀,杀得生活措手不及!
  7. 【解决】ocam录制失败。 导致: WASRecord: pAudioClient- Initialize failed. (hr=0x80070005
  8. 56个清新文艺ppt模板
  9. 【企业架构】确定策略和动机
  10. 【Java代码】MP3、flac歌曲批量生成同名的“xxx.lrc”歌词文件导入索尼黑砖二代