1. 初识Socket

server和clinet之间的交互方式

2. 客户端和服务端的单次交互

 ====================================
服务端 import socket host = '127.0.0.1'
port = 8090
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.bind((host,port))
sk.listen(1) conn,addr = sk.accept()
accept_data = conn.recv(1024).decode('UTF-8', 'ignore')
print(accept_data)
feedback_data =("回复\""+accept_data+"\":\n\t你好,我是Server端").encode("utf8")
conn.send(feedback_data)
 ======================================
客户端 import socket host = '127.0.0.1'
port = 8090 sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect((host,port)) sk.sendall(("你好,我是Client @Simple").encode("utf8"))
data = sk.recv(1024)
print(data.decode('UTF-8', 'ignore'))

3. 客户端和服务端单线程交互

 服务端

 import socket

 host = '127.0.0.1'
port = 8090
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.bind((host,port))
sk.listen(1) while True:
conn,addr = sk.accept()
while True:
accept_data = conn.recv(1024).decode('UTF-8', 'ignore')
if not accept_data:
break
print(accept_data)
feedback_data =("回复\""+accept_data+"\":\n\t你好,我是Server端").encode("utf8")
conn.sendall(feedback_data) conn.close()
 客户端

 import socket,time

 host = '127.0.0.1'
port = 8090 sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect((host,port)) for i in range(10):
sk.sendall(("你好,我是Client No.%d" %i).encode("utf8"))
data = sk.recv(1024)
print(data.decode('UTF-8', 'ignore'))
time.sleep(2)
i = i + 1
sk.close()

4. 多个客户端和服务端的多线程交互

 服务端

 import socketserver

 class myTCPhandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
self.data = self.request.recv(1024).decode('UTF-8', 'ignore').strip()
if not self.data : break
print(self.data)
self.feedback_data =("回复\""+self.data+"\":\n\t你好,我是Server端").encode("utf8")
self.request.sendall(self.feedback_data) host = '127.0.0.1'
port = 9090
server = socketserver.ThreadingTCPServer((host,port),myTCPhandler)
server.serve_forever()
 客户端1-n

 import socket,time

 host = '127.0.0.1'
port = 9090 sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect((host,port)) for i in range(10):
sk.sendall(("你好,我是Client No.%d" %i).encode("utf8"))
data = sk.recv(1024)
print(data.decode('UTF-8', 'ignore'))
time.sleep(2)
i = i + 1
sk.close()

Python进阶篇:Socket多线程的更多相关文章

  1. python进阶篇

    python进阶篇 import 导入模块 sys.path:获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到. ​ import sys ...

  2. (转载)Python一篇学会多线程

    Python 一篇学会多线程 链接:https://www.cnblogs.com/yeayee/p/4952022.html  多线程和多进程是什么自行google补脑,廖雪峰官网也有,但是不够简洁 ...

  3. Python进阶基础学习(多线程)

    Python进阶学习笔记(一) threading模块 threading.thread(target = (函数)) 负责定义子线程对象 threading.enumerate() 负责查看子线程对 ...

  4. Python 一篇学会多线程

    多线程和多进程是什么自行google补脑,廖雪峰官网也有,但是不够简洁,有点晕,所以就整个简单的范例. 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用 ...

  5. Python 进阶 之 socket模块

    Python Socket 编程详细介绍 转载地址:https://gist.github.com/kevinkindom/108ffd675cb9253f8f71?signup=true Pytho ...

  6. Python 进阶篇

    作者:武沛齐 出处:http://www.cnblogs.com/wupeiqi/articles/5246483.html Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这 ...

  7. [经典]Python 一篇学会多线程

    对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的MS-DOS时代,操作系统处理问题都是单任 ...

  8. Go语言之进阶篇Socket编程

    一.Socket编程 1.什么是Socket Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭clo ...

  9. Python进阶篇四:Python文件和流

    摘要: Python对于文件和流的操作与其他编程语言基本差不多,甚至语句上比其他语言更为简洁.文件和流函数针对的对象除了这两者之外还有,类文件(file-like),即python中只支持读却不支持写 ...

随机推荐

  1. ECMAScript 6中的var,let,const

    var的变量提升 console.log(a); //输出undefined ; 他的实际执行顺序是: var a: console.log(a); a= 这就是var的变量提升 const命令的用法 ...

  2. git 放弃本地修改操作

      如果在修改时发现修改错误,而要放弃本地修改时, 一, 未使用 git add 缓存代码时. 可以使用 git checkout -- filepathname (比如: git checkout ...

  3. AutoCAD DevTV-AUTOCAD二次开发资源合集

    Webcast Language Date AutoCAD .Net - Session 2 English 13-Sep-12 AutoCAD .Net - Session 1 English 6- ...

  4. perl6: hash小笔记

    > ,,, { => , => } > my $a = :%h h => { => , => } > $a.perl :h({, }) > my ...

  5. imperva-代理安装

    首先创建网关上面的监听端口

  6. javascript中用闭包递归遍历树状数组

    做公司项目时,要求写一个方法,方法的参数为一个菜单数组集合和一个菜单id,菜单数组的格式为树状json,如下面所示: [{"id":28,"text":&quo ...

  7. 二维码扫描开源库ZXing定制化

    最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. 建议: 如果需要集成到自己的app上,而不是做一个demo,不推荐用ZXing的Android外围开 ...

  8. python网络编程--线程GIL(全局解释器锁)

    一:什么是GIL 在CPython,全局解释器锁,或GIL,是一个互斥体防止多个本地线程执行同时修改同一个代码.这把锁是必要的主要是因为当前的内存管理不是线程安全的.(然而,由于GIL存在,其他特性已 ...

  9. Oracle 函数 “判断数据表中不存在的数据,才允许通过”

    create or replace function mca_detail_material_val(p_material_code VARCHAR2, --实参 p_material_name VA ...

  10. jersey 过滤器名称绑定的问题 NameBinding Provider

    查资料也不容易查,这个问题困扰了我两天. 当没有 @Provider 的时候 过滤器不会被执行.