#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编程示例的更多相关文章

  1. 多线程Java Socket编程示例

    package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...

  2. Linux socket编程示例(最简单的TCP和UDP两个例子)

    一.socket编程 网络功能是Uinux/Linux的一个重要特点,有着悠久的历史,因此有一个非常固定的编程套路. 基于TCP的网络编程: 基于连接, 在交互过程中, 服务器和客户端要保持连接, 不 ...

  3. Java Socket编程示例

    一.Socket简介: 1.什么是Socket 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket ...

  4. Python Socket 编程示例 Echo Server

    简评:我们已经从「Python Socket 编程概览」了解了 socket API 的概述以及客户端和服务器的通信方式,接下来让我们创建第一个客户端和服务器,我们将从一个简单的实现开始,服务器将简单 ...

  5. 多线程Java Socket编程示例(转)

    这篇做为学习孙卫琴<<Java网络编程精解>>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送 ...

  6. Socket 编程示例(二)

    利用晚上这点闲暇时间,写了一个Socket通信的小实例,该实例包含服务器端和客户端.其基本工作流程是:当服务器启动服务以后,客户端进行连接,如果连接成功,则用户可以在发送消息框中输入待发送的消息,然后 ...

  7. 基于UDP协议的socket编程示例

    客户端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; impo ...

  8. 多线程socket编程示例

    工程: 代码: package com.my.socket.business; /** * 业务实现类 * * @author ZY * */ public class CoreMisBusiness ...

  9. linux socket编程示例

    #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include &l ...

随机推荐

  1. 透视HTTP协议,带你拨开纷繁复杂的表象

    一个HTTP,打趴80%面试者! HTTP是一个在计算机世界里专门在两点之间传输文字.图片.音频.视频等超文本数据的约定和规范.如果你不懂HTTP协议,那就相当于是个只有半桶水的程序员. 在这个专栏中 ...

  2. 「starter推荐」简单高效Excel 导出工具

    EasyExcel EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. 64M内存1分钟内读取75M(46W行25列)的E ...

  3. xman_2019_format(非栈上格式化字符串仅一次利用的爆破)

    xman_2019_format(非栈上格式化字符串仅一次利用的爆破) 首先检查一下程序的保护机制 然后用IDA分析一下 存在后门 首先malloc了一片堆空间,读入数据 把刚刚读入的数据当作格式化字 ...

  4. CPU 空闲时在干嘛?

    人在空闲时会发呆会无聊,计算机呢? 假设你正在用计算机浏览网页,当网页加载完成后你开始阅读,此时你没有移动鼠标,没有敲击键盘,也没有网络通信,那么你的计算机此时在干嘛? 有的同学可能会觉得这个问题很简 ...

  5. (十三)VMware Harbor 身份验证模式

    VMware Harbor 修改Harbor仓库admin用户 参考:https://blog.csdn.net/qq_40460909 https://blog.csdn.net/qq_404609 ...

  6. Zabbix三种邮箱告警配置

    环境 环境 IP地址 主机名 需要安装的应用 系统版本 服务端 192.168.23.140 zabbix lamp zabbix_server zabbix_agent CentOS 8 客户端 1 ...

  7. ART模式下基于dex2oat脱壳的原理分析

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78513483 一般情况下,Android Dex文件在加载到内存之前需要先对dex ...

  8. Tomcat容器、JSP和Servlet

    目录 JSP Tomcat.JSP和Servlet JSP JSP全名为Java Server Pages,其根本是一个简化的Servlet设计.JSP技术有点类似ASP技术,它是在传统的HTML网页 ...

  9. svchost服务(DLL服务)

    相比于exe服务,DLL服务只需要一个dll,而且运行是通过svchost.exe来运行的,同时安装和卸载的时候需要自己手动修改相关注册表.原理及其细节就不多说了,直接上代码吧(我写的这个是创建新组然 ...

  10. c/c++ 指针函数 和 函数指针

    指针函数:返回指针类型的函数,定义方法如下: 类型标识符 *函数名(参数列表) 函数指针:指向函数入口地址的指针,定义方法如下: 类型标识符 (*指针名称)(形参列表) 下面我们通过一段代码加深我们的 ...