Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 网络编程

Python 网络编程

作者头像
用户1173509
发布于 2018-01-17 07:06:54
发布于 2018-01-17 07:06:54
1.1K00
代码可运行
举报
文章被收录于专栏:CaiRuiCaiRui
运行总次数:0
代码可运行

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)

2.常见的套接字对象方法和属性

名称

描述

服务器套接字方法

s.bind()

将地址(主机名、端口号对)绑定到套接字上

s.listen()

设置并启动TCP监听器

s.accept()

被动接受TCP客户端连接,一直等待直到连接到达(阻塞)

客户端套接字方法

s.connect()

主动发起TCP服务器连接

s.connect_ex()

connect的扩展版本,此时会以错误代码的形式返回问题,而不是抛出一个异常

普通的套接字方法

s.recv()

接受TCP消息

s.send()

发送TCP消息

s.sendall()

完整的发送TCP消息

s.recvfrom()

接收UDP消息

s.shutdown()

关闭连接

s.close()

关闭套接字

3、创建TCP服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ss = socket()    #创建服务器套接字
ss.bind()            #套接字与地址绑定
ss.listen()            #监听连接
inf_loop:              #服务器无限循环
    cs = ss.accept()          #接收客户端连接
    comm_loop:                #通信循环
        cs.recv()/cs.send()    #对话(接收、发送)
    cs.close()              #关闭客户端套接字
ss.close()               #关闭服务器套接字(可选)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
#TCP时间戳服务器

from socket import *
from time import ctime

HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (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客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cs = socket()
cs.connect()
comm_loop:
    cs.send()/cs.recv()
cs.close()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
#TCP时间戳客户端

from socket import *

HOST = '127.0.0.1'
PORT = 21567
BUFSIZ = 1024
ADDR = (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服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ss = socket()
ss.bind()
inf_loop:
    cs = ss.recvfrom()/ss.sendto()
ss.close()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
#UDP时间戳服务器

from socket import *
from time import ctime

HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (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客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cs = socket()
comm_loop:
    cs.send()/cs.recvfrom()
cs.close()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
#UDP时间戳客户端

from socket import *

HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (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()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-10-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python网络编程
套接字是计算机网络数据结构。在任何类型的通信开始之前,网络应用程序必须创建套接字。可以将它们比作电话插孔,没有它将无法进行通信。
py3study
2020/01/15
7970
[PYTHON] 核心编程笔记(16.P
套接字只有两种一种是面向连接套接字,即在通讯之前一定要建立一条连接,这种通讯方式提供了顺序的,可靠的不会重复的数据传输,每一份要发送的信息都会拆分成多份,每份都会不多不少的到达目的地后重新按顺序拼装起来,传给正在等待的应用程序
py3study
2020/01/08
1.4K0
python核心编程(网络编程)
1、创建TCP 套接字,必须使用SOCK_STREAM 作为套接字类型。创建UDP 套接字,必须使用SOCK_DGRAM 作为套接字类型。 2、创建TCP套接字:tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 创建UDP套接字:u pSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 3、服务端方法: s.bind() s.listen() s.accept() 客户端方法:s.connect() s.connect_ex()
用户5760343
2022/05/14
1.5K0
python核心编程(网络编程)
python网络编程初级
网络编程的专利权应该属于Unix,各个平台(如windows、Linux等)、各门语言(C、C++、Python、Java等)所实现的符合自身特性的语法都大同小异。在我看来,懂得了Unix的socket网络编程,其他的形式的网络编程方法也就知道了。这句话说得还不太严谨。准确的应该说成懂得了socket编程的原理,网络编程也就知道了,不同之处就在于每个平台,每个语言都有自己专享的语法,我们直接灵活套用就行了。 下面是用python实现的最基本的网络编程的例子,即依托于客户端-服务器的架构,实现客户端与服务器之
Linux云计算网络
2018/01/11
8140
python-网络编程
  socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
yaohong
2020/06/19
1.4K0
python-网络编程
python使用socket创建tcp服务器和客户端
分别在python2.7和python3.6下测试。在启动时需要先启动服务器端,在启动客户端。
公众号---人生代码
2019/09/19
5.7K0
python使用SocketServer实现网络服务器
SocketServer简化了网络服务器的编写。在进行socket创建时,使用SocketServer会大大减少创建的步骤,并且SocketServer使用了select它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer。这4个类是同步进行处理的,另外通过ForkingMixIn和ThreadingMixIn类来支持异步。
公众号---人生代码
2019/09/19
5.3K0
socket 编程初探
一 简介 socket是两个应用程序进行通信的管道,这两个应用程序可以在同一台机器上,也可以位于两台不同的机器上,相同的网络或者不同网络之间的。Python socket有丰富的类和方法,可以简化socket编程。 二 socket 2.1 socket类型
用户1278550
2018/08/09
1.1K0
python创建tcp服务端和客户端
1.tcp服务端server 1 from socket import * 2 from time import ctime 3 4 HOST = '' 5 PORT = 9999 6 BUFSIZ = 1024 7 ADDR = (HOST, PORT) 8 9 tcpSerSock = socket(AF_INET, SOCK_STREAM) #创建套接字 10 tcpSerSock.bind(ADDR) #绑定IP和端口 11 tcpSerSock.listen(5)
py3study
2020/01/19
8420
python实现单工、半双工、全双工聊天室
半双工实现是连接建立以后,服务器等待客户端发送消息,客户端发送消息后等待接收服务器,这样一来一回循环往复下去。直到出现quit,关闭连接。
Ewdager
2020/07/14
1.7K0
12 . Python3之网络编程
小结:CS响应速度快,安全性强,一般应用于局域网中,但是开发维护成本高;BS可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。所以有些单位日常办公应用BS,在实际生产中使用CS结构。
iginkgo18
2020/09/27
1.1K0
12 . Python3之网络编程
python socket tcp通信模型
from socket import * from time import ctime
用户5760343
2022/05/14
3030
通过Python脚本理解系统线程
from time import ctime #导入time包,同时在本地可使用ctime进行调用
py3study
2020/01/03
4230
python网络编程--socket简单
python网络编程                                                                                                                                    
py3study
2020/01/13
4780
代理模式下获取客户真实IP
我们经常会在我们后端服务前加一层代理去做负载均衡或认证,比较有名的就是apisix。但是,这样会出现一些问题,比如说后端服务无法获取到客户真实的ip,显示的都是代理的ip,对于业务展示会有问题。对于7层的后端服务还好,可以在载荷里将客户的出口ip带上来,但是四层和三层就不太容易了,目前主流的有下面两种解决方案:
于顾而言SASE
2024/11/14
1950
代理模式下获取客户真实IP
Python—网络编程Socket
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
py3study
2020/01/14
6550
Python进阶之网络编程
把多方链接在一起,进行数据传递; 网络编程就是,让不同电脑上的软件进行数据传递,即进程间通信;
py3study
2020/01/16
8500
Python之网络编程
一、软件开发的架构 涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:qq、微信、网盘这一类是属于需要安装的桌面应用 第二种是web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用 这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构:C/S架构和B/S架构 C/S架构 C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后
新人小试
2018/04/12
1.5K0
Python之网络编程
网络编程中的TCP和UDP
TCP( Transmission control protocol )即传输控制协议,是一种面向连接、可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。
@小森
2024/07/25
1550
网络编程中的TCP和UDP
基于udp的套接字
1 ss = socket() #创建一个服务器的套接字 2 ss.bind() #绑定服务器套接字 3 inf_loop: #服务器无限循环 4 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) 5 ss.close() # 关闭服务器套接字 udp客户端 cs = socket() # 创建客户套接字 comm_loop: # 通讯循环 cs.sendto()/c
超蛋lhy
2018/08/31
8530
相关推荐
Python网络编程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验