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

  数据在网络上进行传播,需要通过一种通信协议。常见的通信协议有: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. POJ 1018 Communication System(贪心)

    Description We have received an order from Pizoor Communications Inc. for a special communication sy ...

  2. sass 变量

    1.使用变量 $符号标识变量 变量名中  中划线和下划线互通(不包括sass中纯 css 部分) 变量值 css 属性标准值 包括以空格 和 逗号 , 分开的多个属性值 变量可以定义在规则块之外

  3. 消息队列(MQ)入门-activemq,代码级别

    第一种:activemq: 1.从官网下载apache-activemq-5.15.3-bin.zip并解压: 2.启动activemq, CMD--/bin/activemq start ,访问12 ...

  4. vue子组件向父组件传值

    vue2.0中通过$emit事件在子组件中自定义事件,通过操作子组件中的事件,向父组件传递参数: 首先写一个叫做parentComp.vue的父组件: <template> <div ...

  5. 老男孩Python全栈开发(92天全)视频教程 自学笔记09

    day9课程内容: 乌班图(ubuntu)64位系统 和 VMware 虚拟机安装(官网收费又麻烦,在网上找资源 安装vmware: vm运行(秘钥找度娘)--文件--新建虚拟机--自定义 下一步-- ...

  6. EmguCV中图像类型进行转换

    1.       Bitmap:类型不在 Emgucv命名空间中 2.       Image<TColor, TDepth> 3.       Mat: 4.       UMat: 高 ...

  7. openstack-ocata-环境准备1

    Openstack环境准备1. 最少两台机器2. Controller:1核cpu 4G内存 5G硬盘3. Computer:1核cpu 2G内存 10G硬盘4. 至少两个网卡,本次采用四个网卡(1网 ...

  8. 创建基于MailKit和MimeKit的.NET基础邮件服务

    邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦..NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础 ...

  9. hashtable的运用实例

    #include <hash_set> #include <iostream> using namespace std; int main() { hashtable<i ...

  10. GitHub上最火的Android开源项目整理

    这篇文章介绍GitHub上另外34个非常受欢迎的Android开源项目,在这些项目中,你又在用或用过哪些呢? 41. android-swipelistview SwipeListView是一个And ...