Socket

  网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket, 又称为“套接字”。

模块

 import socket

创建套接字

 socket.socket([family[, type[, proto]]])
  • family: 套接字家族可以使AF_UNIX或者AF_INET
  • type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM(基于TCP)SOCK_DGRAM(基于UDP)
  • protocol: 一般不填默认为0.

常用函数

sk.bind(address)

  s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。

sk.listen(backlog)

  开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。

backlog等于5,表示内核已经接到了连接请求,但服务器还没有调用accept进行处理的连接个数最大为5
      这个值不能无限大,因为要在内核中维护连接队列

sk.accept()

  接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。

  接收TCP 客户的连接(阻塞式)等待连接的到来

sk.connect(address)

  连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

sk.close()

  关闭套接字

sk.recv(bufsize[,flag])

  接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。

sk.send(string[,flag])

  将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。即:可能未将指定内容全部发送。

单线程通信

  该实例中,只能 client 发一句, server回一句(先启动server,后启动client)

server

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: jyroy import socket if __name__ == '__main__':
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #ipv4, TCP
sock.bind(('0.0.0.0',5000)) #元组,相当于一个参数
sock.listen(10) #同时保持是十个人的连接
conn, addr = sock.accept()
while True:
data = conn.recv(1024) #最多1K的数据
print(data)
if data == 'bye':
break
else:
msg = raw_input(">>")
conn.send(msg)
sock.close()
print('Bye!!')

client

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: jyroy import socket, time if __name__ == '__main__':
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost',5000))
while True:
msg = raw_input(">>")
if msg == "bye":
sock.send(msg)
sock.close()
break
else:
sock.send(msg)
data = sock.recv(1024)

多线程通信

  在该实例中可以自由发送和接收信息(先启动server,后启动client)

  利用threading,多线程进行接受消息和发送消息

  callback_recv函数负责接受信息的功能
  callback_send函数负责发送信息的功能

server

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: jyroy import socket, threading, sys def callback_send(conn):
''' :param sq:
:return:
'''
while True: #为了维持持续的发送
msg = raw_input(">>")
conn.send(msg) def callback_recv(conn):
''' :param sock:
:return:
'''
while True: #为了维持持续的接收
data = conn.recv(1024)
print(data) if __name__ == '__main__':
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('0.0.0.0',5000)) #元组,相当于一个参数
sock.listen(10) #同时保持是十个人的连接
conn, addr = sock.accept() thread_send = threading.Thread(target=callback_send, args=(conn, ))
thread_recv = threading.Thread(target=callback_recv, args=(conn, )) thread_send.start()
thread_recv.start() sock.close()

client

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: jyroy import socket, time, threading, sys def callback_send(sock):
''' :param sq:
:return:
'''
while True:
msg = raw_input(">>")
sock.send(msg)
# if msg in ['bye', 'quit']:
# sock.close
# break def callback_recv(sock):
''' :param sock:
:return:
'''
while True:
data = sock.recv(1024)
print(data) if __name__ == '__main__':
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost',5000)) thread_send = threading.Thread(target=callback_send, args=(sock, ))
thread_recv = threading.Thread(target=callback_recv, args=(sock, )) thread_send.start()
thread_recv.start() while True:
pass
sock.close()

效果展示

注意

  一定要先server程序启动,只有server在等待client之后,client才能找到server进行通信。

  我这个只是本机的调试,要和别人通信时,把client程序中,把connect的ip地址,从localhost换成要通信的ip地址


关于python网络编程的其他资料

  菜鸟教程--http://www.runoob.com/python/python-socket.html

  python官方--https://docs.python.org/3/library/socket.html

python:socket网络编程的更多相关文章

  1. Python Socket 网络编程

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

  2. Python Socket 网络编程 (客户端的编程)

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

  3. Python Socket网络编程详解

    Socket 简介 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. s ...

  4. 25 python socket网络编程

    一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...

  5. Python - Socket网络编程 - 第二十六天

    网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高 ...

  6. python——socket网络编程

    一.OSI七层模型

  7. python socket网络编程之粘包问题详解

    一,粘包问题详情 1,只有TCP有粘包现象,UDP永远不会粘包 你的程序实际上无权直接操作网卡的,你操作网卡都是通过操作系统给用户程序暴露出来的接口,那每次你的程序要给远程发数据时,其实是先把数据从用 ...

  8. 初学Python——Socket网络编程

    认识socket socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递.我们知道网络 通信 都 是基于 ip+port(端口) 方能定位到目标的具体机 ...

  9. Python socket网络编程(通信介绍)

      socket通信介绍 通信介绍(一) 1.所有网络协议的基础就是:socket 2.socket对TCP与UDP协议封装,让用户进行简单操作. 3.socket只做两件事:发 send,收 rec ...

  10. Python Socket 网络编程 (服务器端编程)

    服务器端主要做以下工作: 打开 socket 绑定到特定的地址以及端口上 监听连接 建立连接 接收/发送数据 上面已经介绍了如何创建 socket 了,下面一步是绑定. 绑定 socket 函数 bi ...

随机推荐

  1. HTML5 & MUI 界面样式

    垂直居中+自动换行 样式效果如下所示,当文字没有超出一行时,显示如“备注信息”,当文字超出一行时,显示如“维修地点” HTML代码如下: <div class="mui-input-r ...

  2. python的 a,b=b,a+b 和 a=b b=a+b 的区别(经典)

    刚刚我在学习python的时候,发现下面的这个赋值要把给绕晕了(思考了很久),所以我整理之后写下博文, 希望对未来的学弟学妹有帮助! 永远爱你们的! ----新宝宝 n,a,b=0,0,1 while ...

  3. 机器学习中的范数规则化-L0,L1和L2范式(转载)

    机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化. ...

  4. 《前端之路》之 JavaScript 进阶技巧之高阶函数(下)

    目录 第二章 - 03: 前端 进阶技巧之高阶函数 一.防篡改对象 1-1:Configurable 和 Writable 1-2:Enumerable 1-3:get .set 2-1:不可扩展对象 ...

  5. 一文助您成为Java.Net双平台高手

    写在前面:本文乃标题党,不是月经贴,侧重于Web开发差异,或细节或概述,若有不对之处,还请各位读者本着友好互助的心态批评指正.由于博客园中.Neter较多(个人感觉),因此本文也可以作为.Neter到 ...

  6. C#开发APP,ToolBar控件在Smobiler中的使用方式【附案例源码】——Smobiler移动开发平台

    控件说明 底部工具栏控件. 效果演示 其他效果 该界面为仿淘宝UI制作的一个简单的UI模板,源码获取方式请拉至文章末尾. 特色属性 属性 属性说明 Direction(相对布局) 容器主轴方向. Fl ...

  7. C# .NET枚举Enum项获取

    有些场景下,我们需要列举出Enum中的所有项,比如 Enum转到下拉列表给用户选择,这时我们就需要列出所有项出来了. StringBuilder sb = new StringBuilder(); / ...

  8. nginx + lua 限制ip地址访问

    实验环境:docker + openresty 我限制的5秒钟内允许访问两次效果图: default.conf  代码如下: lua_shared_dict my_limit_count_store ...

  9. 正向代理&反向代理 简(fu)明(za)解释

    最近写的东西越来越偏向Web程序员了··· 你想读懂本篇,就要知道什么是Web服务器——装在世界上某个机房里某台机器里某个操作系统里的一个,对外(公网或者你能访问)服务各种你需要的信息的软件! 它可以 ...

  10. 2、自动化运维之SaltStack远程执行详解

    SaltStack远程执行详解 ●目标(Targeting) ●模块(Module) ●返回(Returnners) 混合模式-C 选项 主机名设置参照: redis-node1-redis03-id ...