当前位置: 首页 > news >正文

【网络编程】Python网络编程详解socket

1、服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的“服务”。它存在唯一目的就是等待客户端的请求,并响应它们(提供服务),然后等待更多请求。

2、客户端/服务器架构既可以应用于计算机硬件,也可以应用于计算机软件。

3、在服务器响应客户端之前,首先会创建一个通信节点,它能够使服务器监听请求。

一、套接字:通信端点

1、套接字

  套接字是计算机网络数据结构,它体现了上节中所描述的“通信端点”的概念。在任何类型的通信开始之前,网络应用程序必须创建套接字。

  有两种类型的套接字:基于文件和面向网络的。

2、套接字地址:主机-端口对

  如果一个套接字像一个电话插孔-允许通信的一些基础设施,那么主机名和端口号就像区号和电话号码的组合。有效的端口号范围为0-65535(小于1024的端口号预留给了系统)

3、面向连接的套接字和与无连接的套接字

  面向连接,在进行通信之前必须建立一个连接。实现这种连接类型主要协议是TCP(传输控制协议)

  无连接,在通信之前并不需要建立连接。主要协议是UDP(用户数据报协议)

二、Python中的网络编程

1、socket()模块函数

为创建TCP/IP套接字:tcpSock = socket.socket(socket.AF_INEF,socket.SOCK_STREAM)

创建UDP/IP套接字:udpSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

【python网络编程】Python网络编程详解

3、创建TCP服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

 

ss = socket()  #创建服务器套接字
ss.bind()      #套接字与地址绑定
ss.listen()      #监听连接
inf_loop:       #服务器无限循环
  cs = ss.accept()     #接收客户端连接
  comm_loop:        #通信循环
    cs.recv()/cs.send()  #对话(接收、发送)
  cs.close()       #关闭客户端套接字
ss.close()        #关闭服务器套接字(可选)
#!/usr/bin/env python
#TCP时间戳服务器
from socket import *
from time import ctime
HOST = ''PORT = 21567BUFSIZ = 1024ADDR = (HOST,PORT)
tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)while True:
  print('waiting for connecting...')
  tcpClisock, addr = tcpSerSock.accept()
  print('...connected from:',addr)
  while True:
    data = tcpClisock.recv(BUFSIZ)
    if not data:
      break
    tcpClisock.send('[%s] %s' % (bytes(ctime(),'utf-8'),data))
  tcpClisock.close()
tcpSerSock.close()

4、创建TCP客户端

1
2
3
4
5

 

cs = socket()
cs.connect()
comm_loop:
  cs.send()/cs.recv()
cs.close()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

 

#!/usr/bin/env python
#TCP时间戳客户端
from socket import *
HOST = '127.0.0.1'PORT = 21567BUFSIZ = 1024ADDR = (HOST,PORT)
tcpClisock = socket(AF_INET,SOCK_STREAM)
tcpClisock.connect(ADDR)while True:
  data = input('> ')
  if not data:
    break
  tcpClisock.send(data)
  data = tcpClisock.recv(BUFSIZ)
  if not data:
    break
  print(data.decode('utf-8'))
tcpClisock.close()

5、创建UDP服务器

1
2
3
4
5

 

ss = socket()
ss.bind()
inf_loop:
  cs = ss.recvfrom()/ss.sendto()
ss.close()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

 

#!/usr/bin/env python
#UDP时间戳服务器
from socket import *
from time import ctime
HOST = ''PORT = 21567BUFSIZ = 1024ADDR = (HOST,PORT)
udpSerSock = socket(AF_INET,SOCK_DGRAM)
udpSerSock.bind(ADDR)while True:
  print('waiting for message...')
  data, addr=udpSerSock.recvfrom(BUFSIZ)
  udpSerSock.sendto('[%s] %s' % (ctime(),data),addr)
  print('...received from and returned to:',addr)
udpSerSock.close()

6、创建UDP客户端

1
2
3
4

 

cs = socket()
comm_loop:
  cs.send()/cs.recvfrom()
cs.close()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

 

#!/usr/bin/env python
#UDP时间戳客户端
from socket import *
HOST = 'localhost'PORT = 21567BUFSIZ = 1024ADDR = (HOST,PORT)
udpClisock = socket(AF_INET,SOCK_DGRAM)while True:
  data = input('> ')
  if not data:
    break
  udpClisock.sendto(data,ADDR)
  data, ADDR=udpClisock.recvfrom(BUFSIZ)
  if not data:
    break
  print(data)
udpClisock.close()

以上就是本文关于Python网络编程详解的全部内容,希望对大家有所帮助。欢迎参阅:Python中enumerate函数代码解析、python数据类型判断type与isinstance的区别实例解析、python中requests库session对象的妙用详解等,有什么问题可以随时留言,有问题我就改。。。

原文链接:http://www.cnblogs.com/caicairui/p/7749678.html

相关文章:

  • 【多线程】C/C++语言中多线程的简单例子
  • 【Python数据序列化】详解Python之数据序列化(json、pickle、shelve)
  • 【Socket】Windows下C语言的Socket编程例子(TCP和UDP)
  • 【php扩展】PHP-CPP:一个开发PHP扩展的C++库
  • 【php构架】Zend Enginephp
  • 【AOP】轻松理解AOP(面向切面编程)
  • 【GCC】生成debug、release、32位版与64位版|gcc参数和DEBUG条件编译
  • 【stl map】C++中的STL中map用法详解
  • 【socket】Socket send函数和recv函数详解
  • 【OLTP与OLAP】OLTP与OLAP的区别
  • 【gcc】 gcc编译工具生成动态库(共享库)和静态库
  • 【cJSON】cJSON 实例
  • 【yum/apt-get】yum/apt-get/rpm/dpkg/brew之间的区别
  • 【删除重复记录】SQL删除重复记录
  • 【myISAM和innoDB】mySql的引擎myisam和innodb的区别/mysiam
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • gitlab-ci配置详解(一)
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java基本数据类型之Number
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue官网教程学习过程中值得记录的一些事情
  • 阿里云前端周刊 - 第 26 期
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 初识 beanstalkd
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 浮动相关
  • 复杂数据处理
  • 高程读书笔记 第六章 面向对象程序设计
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 使用Swoole加速Laravel(正式环境中)
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 运行时添加log4j2的appender
  • NLPIR智能语义技术让大数据挖掘更简单
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • (02)vite环境变量配置
  • (2)(2.10) LTM telemetry
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)C#调用WebService 基础
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 反射的使用
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET开源快速、强大、免费的电子表格组件
  • .NET微信公众号开发-2.0创建自定义菜单
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @Bean注解详解
  • @html.ActionLink的几种参数格式
  • [Android实例] 保持屏幕长亮的两种方法 [转]