3.socket编程示例
#block_server.py 非阻塞IO示例
#有个疑惑:下面的connfd的blockind要设置为True,不然会出错,待解决
from socket import *
from time import ctime,sleep
s = socket()
s.bind(("0.0.0.0",18888))
s.listen(10)
#设置s为非阻塞状态
s.setblocking(False)
while True:
print("等待连接...")
try:
connfd,addr = s.accept()
except BlockingIOError:
sleep(2)
print(ctime())
continue
print("connect from",addr)
while True:
connfd.setblocking(True)
data = connfd.recv(1024)
if not data:
break
print(data.decode())
serv_msg = input("服务端消息>")
connfd.send(serv_msg.encode())
connfd.close()
s.close()
=========================================
#timeout_server.py 超时检测示例及traceback
from socket import *
from time import sleep,ctime
import traceback
HOST = "0.0.0.0"
PORT = 14444
s = socket()
s.bind((HOST,PORT))
s.listen(5)
#设置超时检测
s.settimeout(5)
while True:
print("服务端等待连接.....")
try:
c,addr = s.accept()
except Exception:
traceback.print_exc()
continue
print("connect from",addr)
while True:
data = c.recv(1024)
if not data:
break
print(data.decode())
serv_msg = input("服务端消息>")
c.send(serv_msg.encode())
c.close()
s.close()
==========================================
#select_server.py select服务端示例
from socket import *
from select import *
HOST = "0.0.0.0"
PORT = 18888
s = socket()
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
s.bind((HOST,PORT))
s.listen(5)
#将需要监控的IO放入rlist
rlist = [s]
wlist = []
xlist = []
print("select服务器启动成功")
while True:
print(f"select正在监控阻塞套接字{rlist}")
print(f"目前列表中有{len(rlist)}个套接字")
rl,wl,xl = select(rlist,wlist,xlist)
for r in rl:
#套接字准备就绪
if r is s:
conn,addr = r.accept()
print("Connect from",addr)
#把新的套接字加入监控列表
rlist.append(conn)
else:
data = r.recv(1024)
if not data:
rlist.remove(r)
r.close()
break
print("received:",data.decode())
r.send("已经收到".encode())
for w in wl:
pass
for x in xl:
pass
===============================================
#select_server2_wlist.py select服务端示例,演示wlist,xlist用法
from socket import *
from select import *
import sys
HOST = "0.0.0.0"
PORT = 18888
s = socket()
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
s.bind((HOST,PORT))
s.listen(5)
#将需要监控的IO放入rlist
rlist = [s]
wlist = []
xlist = [s]
print("select服务器启动成功")
while True:
print(f"select正在监控阻塞套接字{rlist}")
print(f"目前列表中有{len(rlist)}个套接字")
rl,wl,xl = select(rlist,wlist,xlist)
for r in rl:
#套接字准备就绪
if r is s:
conn,addr = r.accept()
print("Connect from",addr)
#把新的套接字加入监控列表
rlist.append(conn)
else:
data = r.recv(1024)
if not data:
rlist.remove(r)
r.close()
break
else:
print(f"received from {str(r.getpeername())}:{data.decode()}",)
#接收完消息,把套接字加入wlist列表,待处理(当wlist内有内容,select会立即返回)
wlist.append(r)
# 当上一步待处理套接字加入wlist,这步立刻处理,处理完把该套接字移出wlist
for w in wl:
w.send(f"已经收到你的消息{str(w.getpeername())}".encode())
wlist.remove(w)
for x in xl:
#如果套接字出错,结束整个程序
if x is s:
s.close()
sys.exit()
=============================================================
#unix_send.py 本地套接字简单应用,发送端
from socket import *
import sys,os
#确定用哪个文件进行通信
server_address = "./test"
#判断文件是否存在,如已存在则删除
if os.path.exists(server_address):
os.unlink(server_address)
#创建本地套接字
s = socket(AF_UNIX,SOCK_STREAM)
#绑定本地套接字文件
s.bind(server_address)
#监听
s.listen(5)
#收发消息
while True:
c,addr = s.accept()
while True:
data = c.recv(1024)
if data:
print(data.decode())
c.sendall("收到消息".encode())
else:
break
c.close()
s.close()
========================================================
#unix_recv.py 本地套接字简单应用,接收端
from socket import *
server_address = "./test"
s = socket(AF_UNIX,SOCK_STREAM)
s.connect(server_address)
while True:
message = input("客户端消息")
if message:
s.sendall(message.encode())
recv_msg = s.recv(1024)
print(recv_msg.decode())
else:
break
s.close()
3.socket编程示例的更多相关文章
- 多线程Java Socket编程示例
package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...
- Linux socket编程示例(最简单的TCP和UDP两个例子)
一.socket编程 网络功能是Uinux/Linux的一个重要特点,有着悠久的历史,因此有一个非常固定的编程套路. 基于TCP的网络编程: 基于连接, 在交互过程中, 服务器和客户端要保持连接, 不 ...
- Java Socket编程示例
一.Socket简介: 1.什么是Socket 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket ...
- Python Socket 编程示例 Echo Server
简评:我们已经从「Python Socket 编程概览」了解了 socket API 的概述以及客户端和服务器的通信方式,接下来让我们创建第一个客户端和服务器,我们将从一个简单的实现开始,服务器将简单 ...
- 多线程Java Socket编程示例(转)
这篇做为学习孙卫琴<<Java网络编程精解>>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送 ...
- Socket 编程示例(二)
利用晚上这点闲暇时间,写了一个Socket通信的小实例,该实例包含服务器端和客户端.其基本工作流程是:当服务器启动服务以后,客户端进行连接,如果连接成功,则用户可以在发送消息框中输入待发送的消息,然后 ...
- 基于UDP协议的socket编程示例
客户端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; impo ...
- 多线程socket编程示例
工程: 代码: package com.my.socket.business; /** * 业务实现类 * * @author ZY * */ public class CoreMisBusiness ...
- linux socket编程示例
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include &l ...
随机推荐
- Struts2(十六篇)
(一)Struts2框架概述 (二)Struts2配置文件 (三)Struts2的Action(简单讲解版) (四)Struts2的Action(深入讲解版) (五)Struts2处理结果管理 (六) ...
- Java性能调优实战,覆盖80%以上调优场景
Java 性能调优对于每一个奋战在开发一线的技术人来说,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 日渐复杂的系统,错综复杂的性能调优,都对Java工程师的技术广度和技术深度提出了更 ...
- Dynamics CRM实体系列之图表
本节开始讲解Dynamics CRM的图表功能.任何产品基本上都会有数据分析的工具,Dynamics CRM当然也不例外,作为一个专门做销售管理的软件数据分析自然也是对于销售管理者的决策有很大的作用的 ...
- Day05_24_继承
继承 什么是继承? 继承本质上是对某一批类的抽象,从而实现对现实世界更好的建模.继承是类和类之间的一种关系,除此之外类和类之间的关系还有依赖.组合.聚合等. 继承就是子类(派生类)继承父类(基类)的特 ...
- hdu4421 2-sat(枚举二进制每一位)
题意: 给你一个数组b[][],在给你一些关系,问是否可以找到一个满足限制的a[], 关系如下(图片): 思路: 说到限制,而且还是两个两个之间的限制,那么很容易想到2-sat ...
- Shiro反序列化漏洞复现
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.使用Shiro的易于理解的API,可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企 ...
- Python中根据库包名学习使用该库包
目录 Python库包模块 import 语句 from-import 语句 搜索路径 PYTHONPATH 变量 命名空间和作用域 查看模块中所有变量和函数,以及查看具体函数的用法 globals( ...
- zTree增加树形菜单格式
result为json字符串 //展示树形菜单 function showMenuTree(result) { console.log("页面展示函数:"+result); //属 ...
- Django(21)migrate报错的解决方案
前言 在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚本.映射到数据库中.创建新的表或者修改表的结构. 问题1:migrate怎么判断哪 ...
- [BUAA2021软工]结对第一阶段博客作业小结
作业链接 结对项目-第一阶段 优秀作业推荐 本次博客作业虽然是简单总结,但是以下作业中都不乏有思考.有亮点的精彩内容,推荐给同学们阅读学习. 山鸣谷应,相得益彰--杰对项目-第一阶段总结 该组对于可能 ...