---恢复内容开始---

  数据在网络上进行传播,需要通过一种通信协议。常见的通信协议有:HTTP,SMTP,DNS,FTP,SSH,SNMP,ICMP PING,DNCP.

  OSI(Open System Interconnect)七层协议:(

  

  在python中如何实现数据的传播呢?答案就是socket,Python将TCP/IP和UDP一起封装在了socket中。

  在socekt实例中有两个很重要的参数 1 地址簇 2 协议类型。这两个参数将直接影响到通信的建立。

FAMILY ADDRESS
AF.INET ==> IPv4,
AF.INET6 ==> IPv6
AF.UNIX ==> local (不常用)
PROTOCOL TYPE
SOCK_STREAM ==> TCP/IP协议
SOCK_DGRAM ==> UDP
默认的实例建立为AF.INET,sock.SOCK_STREAM

  首先建立两个端:服务器端(server)和客户端(client)。

  先来看两个最简单的例子:

  客户端:

#客户端

import socket#引入socket方法
client = socket.socket()#声明socket的类型,同时生成socket的连接对象
client.connect(('localhost',6969))#连接的端口号和端口名
client.send(b"Im client")#需要发送的数据
data = client.recv(1024)#默认最大接收的字节数
print('recv:',data)#打印接收到的数据
client.close()#关闭客户端

  服务器端:

import socket
server = socket.socket()
server.bind(('localhost',6969))#绑定需要监听的端口
server.listen()#开始监听,括号内可设置最大的可监听数量
print('Im starting listening')
conn,addr = server.accept()#等活动开始,accept 将返回两个值,分别送到conn和addr中,conn就是客户端对应在服务器端的连接实例
print("listened")
data = conn.recv(1024)#赋值变量储存接接收客户端的数据,最大为1024byte
print('recv:',data)
conn.send(data.upper())#将从客户端收来的数据大写 server.close()

  那么现在实现了一对一的单次交互,如果想实现一对一的多次交互呢?

  使用while True循环:

  客户端:

while True:
msg = input('>>:'.strip())
client.send(msg.encode('utf-8'))#需要发送的数据
data = client.recv(1024)#默认最大接收的字节数
print('recv:',data)#打印接收到的数据

  服务器端:

while True:
print("listened")
data = conn.recv(1024)
print('recv:',data)
conn.send(data.upper())

  由以上可以看出不管是客户端还是服务器端均是将循环建立在已经确立连接端口之后,即不会重新建立新连接,使用同一端口进行循环通信,这是一对一同一对象进行循环交互的方法。

  如果想要实现两个甚至多个客户端与服务器端进行交互怎么办呢?类似打电话,现在已经建立了连接,当有第二个客户打入的时候会提示说占线请等待。那么在python中应该如何实现呢?

  同样也是while循环。

while True:
conn,addr = server.accept()#等活动开始,conn就是客户端对应在服务器端的连接实例

  此次循环加在接收端口号和地址的前面,表示每被客户端挂断一次便进行一次循环再次与第二个客户端建立通信,达到与多个客户端通信的需求。

python socket知识点的更多相关文章

  1. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  2. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  3. python socket发送魔法包网络唤醒开机.py

    python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...

  4. Python socket编程之二:【struct.pack】&【struct.unpack】

    import struct """通过 socket 的 send 和 recv 只能传输 str 格式的数据""" "" ...

  5. Python Socket,How to Create Socket Server? - 网络编程实例

    文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...

  6. Python Socket,How to Create Socket Cilent? - 网络编程实例

    文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...

  7. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

  8. Python Socket单线程+阻塞模式

    Python之旅]第五篇(二):Python Socket单线程+阻塞模式 python Socket单线程 Socket阻塞模式 串行发送 摘要:  前面第五篇(一)中的一个Socket例子其实就是 ...

  9. python socket之tcp服务器与客户端demo

    python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立 ...

随机推荐

  1. [翻译] 编写高性能 .NET 代码--第二章 GC -- 配置选项

    配置选项 在基于"less rope to hang yourself with"思想下,.NET 框架没有给开发提供很多太多的配置选项.但在大多数情况下,GC会跟你的硬件配置,及 ...

  2. QPS/TPS简介

    系统吞度量要素 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联.单个reqeust 对CPU消耗越高,外部系统接口.IO影响速度越慢,系统吞吐能力越低,反之越高 ...

  3. Java--JDBC连接与Django--DATABASES设置

    JDBC 简介 JDBC(Java Data Base Connectivity,java 数据库连接)是一种用于执行 SQL 语句的 JavaAPI,可以为多种关系 数据库提供统一访问,它由一组用 ...

  4. vector动态数组

    vector是STL模板库中的序列式容器,利用它可以有效地避免空间的浪费. 创建vector容器 vector< int >v:vector< char >:vector< ...

  5. uva10410 栈

    根据DFS和BFS重建树. BFS反映了当前节点到达根结点的距离,通过栈把当前处理的树或则子树的根结点放在栈顶,通过遍历DFS序列,判断当前元素与栈顶元素的关系,如果是子节点,就将它压入栈中成为新的栈 ...

  6. Quartz基本使用

    1.Quartz概述:简单的说就是java的一个定时任务的框架,没有那么复杂的解释,跟前端的定时器一样.在了解它之前,首先熟悉几个概念. 2.基本概念 2.1 Job:表示一个工作,要执行的具体内容. ...

  7. 谈一谈Java中的Error和Exception

    Error和Exception的联系 继承结构:Error和Exception都是继承于Throwable,RuntimeException继承自Exception. Error和RuntimeExc ...

  8. 文本处理三剑客之grep&正则表达式

    grep是一个文本过滤工具,它支持正则表达式,能把搜索匹配到的行打印出来.grep的全称是Global Regular Expression Print(全局正则表达式)使用权限是所有用户. 一.gr ...

  9. 相位噪声 dBc/Hz

    相位噪声和抖动是对同一种现象的两种不同的定量方式.在理想情况下,一个频率固定的完美的脉冲信号(以1 MHz为例)的持续时间应该恰好是1微秒,每500ns有一个跳变沿.但不幸的是,这种信号并不存在.如图 ...

  10. linux命令之 ifconfig

    许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...