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 ...
随机推荐
- HarmonyOS三方件开发指南(17)-BottomNavigationBar
目录: 1.引言 2.功能介绍 3.BottomNavigationBar使用指南 4.BottomNavigationBar开发指南 5.<HarmonyOS三方件开发指南>文章合集 引 ...
- Spring Security OAuth2 实现登录互踢
背景说明 一个账号只能一处登录,类似的业务需求在现有后管类系统是非常常见的. 但在原有的 spring security oauth2 令牌方法流程(所谓的登录)无法满足类似的需求. 我们先来看 To ...
- 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ...
- Ionic5手写签名SignaturePad
测试程序下载:https://hanzhe.lanzous.com/itt47kncw3a 初始化项目 1. 首先新建一个Ionic5的项目: ionic start test-1 blank 2. ...
- 使用IDEA模拟git命令使用的常见场景
目录 使用IDEA模拟git命令使用的常见场景 前期准备 新建一个远程仓库 在一个文件夹内建立两个子文件夹作为两个本地仓库的存放位置 本地仓库与远程仓库建立联系 模拟两个用户协同开发的场景(使用IDE ...
- 剑指Offer 55. 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4]输出: 5 思路:运用归并排序的特点 ...
- B/S与C/S架构的区别
C/S架构优点:1)界面比较丰富2)安全性高3)实现的功能更多,可以实现更复杂的业务4)客户端可以处理部分业务,分担服务器端压力缺点:1)需要开发独立的客户端软件,开发成本高2)需要安装独立的客户端软 ...
- WordPress 函数do_action()详解和应用举例
do_action()函数: 我们经常能看到在一些WordPress函数中调用了do_action()函数,例如get_header(), get_footer()等调用模板的函数中经常调用do_ ...
- 【网络协议】OSI七层模型 和TCP/IP五层模型
OSI(Open System Interconnection)七层模型 TCP/IP 五层模型
- 从苏宁电器到卡巴斯基第14篇:我在苏宁电器当营业员 VI
我也过了一把讲师的瘾 由于iPhone已经成为了我们的主推产品,因此苏宁要求手机专区的每一个人,不论是自营还是厂促,都要对iPhone非常了解才可以.于是,督导也没有事先通知我,就直接让我给手机专区的 ...