python 网络编程 代码版
写博客最怕写什么? 系统原理,框架内核...

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
sk = socket.socket() ## 创建一个sk对象/实例
sk.bind(("127.0.0.1",9999,)) ##ip+端口是一个元祖
##后面最后排5个
sk.listen(5)
# 接收客户端的请求 ,这会阻塞,就是一直等待,程序会停在这里
# 一旦有请求过来,会接受
while True:
## 基于conn连接发送消息
conn,address = sk.accept()
print(address,conn)
socket 服务端初始版
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
obj = socket.socket()
obj.connect(("127.0.0.1",9999,))
obj.close()
socket 客户端初始版
上面的代码是最最最原始的socket通信代码,下面给出一个进一步的代码;
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket ##导入socket模块
sk = socket.socket() ## 创建一个sk对象/实例,即实例化socket对象
sk.bind(("127.0.0.1",9999,)) ##ip+端口是一个元祖,定义好监听的IP地址和端口,可以绑定网卡上的IP地址,但是生产环境中一般绑定0.0.0.0这样所有网卡上都能够接收并处理这个端口的数据了 sk.listen(5) ##设定侦听开始并设定侦听队列里面等待的连接数最大为5 while True: # 接收客户端的请求 ,程序会阻塞在这里,就是一直等待,程序会停在这里;一旦有请求过来,会接受.好比老鸨在门口迎客(连接请求)...
print("服务器处于准备接受状态中...")
## 可以基于conn 发信息
conn,address = sk.accept() ##conn拿到的是接入的客户端的对象,之后服务端和客户端通信都是基于这个conn对象进行通信,address获取的是连接的客户端的IP和端口.
## conn好比一个小姐,从老鸨那里接手客人,老鸨腾空出来,迎接下一个连接请求...
conn.sendall(bytes("xx来电....", encoding='utf8'))
while True: #这个循环来实现相互之间通信的循环
try: ## 为什么要使用try包裹这一块呢?因为在通信过程中客户端突然退出了的话,服务端阻塞在recv状态时将会抛出异常并终止程序,
# 为了解决这个异常,需要我们自己捕获这个异常,这是在windows上,linux上不会抛出异常(测试依旧会...).
receiveBytes = conn.recv(1024) # 定义接收的数据大小为1024个字节并接受客户端传递过来的数据,注意这里的数据在python3中是bytes类型的,
# 在python3中网络通信发送和接收的数据必须是bytes类型的,否则会报错
receiveStr = str(receiveBytes,encoding='utf8') ##打印客户端传递过来的数据,需要从bytes类型数据解码成unicode类型的数据
if receiveStr == 'q': ##如果客户端传递过来的是q,就break当前循环,中断通信连接,跳到上层循环,继续等待下位客人
print("当前会话结束,感谢使用!")
break
conn.sendall(bytes(receiveStr+"好",encoding="utf8"))
except ConnectionResetError as e: ## 捕获到异常之后,打印异常出来并退出循环等待下一个客户端连接
print(e)
continue
##返回接受到的信息
# print(str(receiveBytes))
#py35中不能发字符串,而是发字节
#
print(address,conn)
socket 服务端代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
obj = socket.socket()
obj.connect(("127.0.0.1",9999,))
## obj.recv 也是阻塞的
# print("waitint....")
receiveBytes = obj.recv(1024) ##超过1024,就下次在接收
# print("together...")
receiveStr = str(receiveBytes,encoding='utf8')
print(receiveStr)
while True: # 死循环实现通信
inp = input("请输入内容:")
if inp == 'q':
obj.sendall(bytes(inp, encoding='utf8'))
break
else:
obj.sendall(bytes(inp,encoding='utf8'))
receiveBytes = obj.recv(1024)
result = str(receiveBytes,encoding='utf8')
print(result)
obj.close()
socket 客户端代码
上面给出的代码依旧是服务端和客户端一对一.即服务端在同一时间内,只能和一个客户端通信.这有毛病..
下面的代码,是使用python的socketserver模块,利用多线程,实现同一个服务端"同时"和多喝客户端通信.
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
#print(self.request, self.client_address, self.server)
conn = self.request
conn.sendall(bytes("服务端正在处理你的请求...", encoding='utf8'))
while True:
recvB = conn.recv(1024)
resvS = str(recvB, encoding='utf8')
if resvS == "q":
print("当前会话结束,感谢使用!")
break
conn.sendall(bytes(resvS + "好", encoding='utf8'))
if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1',9999,),MyServer)
server.serve_forever()
socketserver 服务端
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
ck = socket.socket()
ck.connect(("127.0.0.1",9999,))
recvB = ck.recv(1024)
print(str(recvB,encoding='utf8'))
while True:
inp = input("请输入聊天内容:")
if inp =="q":
ck.sendall(bytes(inp,encoding='utf8'))
break
else:
ck.sendall(bytes(inp, encoding='utf8'))
recvB1 = ck.recv(1024)
print(str(recvB1,encoding='utf8'))
ck.close()
socket 客户端
socket模块博客到此结束....
python 网络编程 代码版的更多相关文章
- python 网络编程第二版
为服务端增加多进程解决方案 1.server端代码如下: #!/usr/bin/python #!coding:utf-8 import os,sys,time from socket import ...
- Python网络编程基础 PDF 完整超清版|网盘链接内附提取码下载|
点此获取下载地址提取码:y9u5 Python网络编程最好新手入门书籍!175个详细案例,事实胜于雄辩,Sockets.DNS.Web Service.FTP.Email.SMTP.POP.IMAP. ...
- python核心编程第二版笔记
python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d 提供调试输出1.2 –O 生成优化的字节码(生成 ...
- 28、Python网络编程
一.基于TCP协议的socket套接字编程 1.套接字工作流程 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 ...
- Python核心编程(第二版)PDF
Python核心编程(第二版) 目录 第1部分 Python核心第1章 欢迎来到Python世界1.1 什么是Python1.2 起源1.3 特点1.3.1 高级1.3.2 面向对象1.3.3 可升级 ...
- 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录
目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...
- 图解Python网络编程
返回目录 本篇索引 (1)基本原理 (2)socket模块 (3)select模块 (4)asyncore模块 (5)asynchat模块 (6)socketserver模块 (1)基本原理 本篇指的 ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
随机推荐
- 分布式系统中唯一 ID 的生成方法
在分布式系统存在多个 Shard 的场景中, 同时在各个 Shard 插入数据时, 怎么给这些数据生成全局的 unique ID? 在单机系统中 (例如一个 MySQL 实例), unique ID ...
- CTS2018+1没去记&APIO2018+1游记
bgm Tips:想知道为什么标题不是2019吗,请看评论区 Day -2 md上午才写一道题qwq 机房里一堆dalao都回家收东西去北京了qwq,我菜死了,cts都去不了QAQ 下午晚上也才肝了两 ...
- vue+element ui 时间格式化
<el-table-column prop="startTime" label="日期" width="200" align=&quo ...
- Linux下配置JDK环境
安装前需要查询Linux中是否已经存在jdk 如果存在,将存在的jdk删除 在/etc/profile中添加以下 JAVA_HOME为jdk的安装目录 PATH为jdk可执行文件的目录 使用sourc ...
- 仿scikit-learn模式写的kNN算法
一.什么是kNN算法 k邻近是指每个样本都可以用它最接近的k个邻居来代表. 核心思想:如果一个样本在特征空间中的k个最相邻的样本中大多数属于一个某类别,则该样本也属于这个类别. 二.将kNN封装成kN ...
- 最佳实践:深度学习用于自然语言处理(Deep Learning for NLP Best Practices) - 阅读笔记
https://www.wxnmh.com/thread-1528249.htm https://www.wxnmh.com/thread-1528251.htm https://www.wxnmh. ...
- pandas处理字符串
# pandas 字符串的处理 # 前面已经学习了字符串的处理函数 # df["bWendu"].str.replace("℃","").a ...
- TCP/IP基础总结性学习(5)
与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率. 一. 用单台虚拟主机实现多个域名 HTTP/1.1 规范允许 ...
- 2.k8s资源清单
一.常见资源对象 常见的资源对象:(包括但不仅限于) l Workload: Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob ...
- shell之文本过滤(正则表达式)
shell之文本过滤(正则表达式) 分类: linux shell脚本学习2012-09-14 12:59 213人阅读 评论(0) 收藏 举报 当从一个文件或命令输出中抽取或过滤文本时,可以使用正则 ...