#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. CLUSTAL W论文解读

    CLUSTAL W: improving the sensitivity of progressive multiple sequence alignment through sequence wei ...

  2. manjaro找不到默认键盘布局

    1 问题描述 manjaro安装fcitx后,没有默认的键盘布局,不是这样: 而是: 2 解决方案 解决方案在启动fcitx时就已经有提示了: 缺少了libjson-c这个库,直接使用pacman搜索 ...

  3. mariadb_2 单表的增删改查

    命令关键字: 创建表  create 删除表  drop 修改表的内容  update 修改表的结构  alter 删除表中内容 delete 增加表中内容 insert 查询表中内容 select ...

  4. Ananagrams UVA - 156

      Most crossword puzzle fans are used to anagrams - groups of words with the same letters in differe ...

  5. k8s deployment 金丝雀发布 更新的 暂停 恢复 回滚

    假设现在有业务需求,计划将所有的nginx 从镜像版本1.14更新到1.15,这一次发布不紧需要平滑发布,还需要 金丝雀发布,及确认其中一个Pod没有问题后在进行剩余的更新. 暂停与恢复也可以使用ym ...

  6. 【C#】一个Loading窗体载入与销毁的方法

    写在前面 Minecraft Command Editor 2跳票了近两年的时间(对不起!!).2021年2月,我重启了MCE项目,并正式命名为Minecraft Command Editor 202 ...

  7. 为什么有时博客中的代码复制进自己的VS中报错

    昨天写代码时遇到一个问题,我搜了一篇博客,然后复制到我的WPF中, 然后,全报错(当时快给我气死了,一篇有一篇的不能用,试了一次又一次,时间全浪费在这上面了,没打游戏,做的东西也没出来) 问题原因: ...

  8. 14- 小程序测试与airtest自动化测试

    什么是小程序 小程序是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或者搜一下即可打开应用.也体现了"用完即走"的理念,用户不用关 ...

  9. 04- 移动APP功能测试要点以及具体业务流程测试

    5.离线测试: 离线是应用程序在本地的客户端会缓存一部分数据以供程序下次调用. 1.对于一些程序,需要在登录进来后,这是没有网络的情况下可以浏览本地数据. 2.对于无网络时,刷新获取新数据时,不能获取 ...

  10. UVA11078开放式学分制(前面-后面的最大值)

    题意:       给你一个长度为n的整数序列a0 a1 a2..找出两个整数ai,aj(i<j),使得ai-aj最大. 思路:       简单题目,想象一下,对于每一个数我们只要用他前面的最 ...