#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. 开篇:ISP基本模块介绍

    一般来说,ISP pipeline没有非常严格的流程,各家厂商具体实现方案或多或少都有些差异,但大致流程如下图所示.其中,又可以根据处理的数据将其分成BPS(Bayer process segment ...

  2. 结对编程_stage2

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 结对项目-第二阶段 我在这个课程的目标是 从实践中学习软件工程相关知识(结构化分析和设计方法.敏捷开发方法. ...

  3. SQLlite实现增删查改

    activity_main.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  4. Java刷题-list

    一.打印两个有序链表的公共部分 补充一个关于节点的链表构造方法 Node next是设置指针域 import java.io.IOException;这个是报错信息 这是两个lO流 import ja ...

  5. Java(100-113)【类与对象、封装、构造方法】

    1.对象的创建以及使用 Student stu =new Student(); 根据一个类创建一个对象 导包.创建.使用 2.手机练习 有main才能run Phone.java package cn ...

  6. 《青橙商城》day01避坑指南

    1.persistence-api报红 问题: 在模块qingcheng_pojo下的pom.xml中,报红 <dependencies> <dependency> <g ...

  7. 1.PreparedStatement VS Statement

    两者都是Sun公司定义的接口,PreparedStatement属于Statement的子接口.二者类似信使,向数据库中执行sql语句: Statement存在拼串的操作,比较繁琐:存在SQL注入问题 ...

  8. 基于excel的接口自动化测试框架:支持参数化、关联等

    1. 框架结构说明 2. 框架代码实现 action 包  case_action.py business_process 包 main_process.py util 包 global_var.py ...

  9. 1151 LCA in a Binary Tree (30point(s))

    The lowest common ancestor (LCA) of two nodes U and V in a tree is the deepest node that has both U ...

  10. Selenium3自动化测试【17】元素定位之Link定位

    Link定位 find_element_by_link_text方法是通过文本链接来定位元素. 以Bing首页中顶部的[学术]链接为例,如图所示. 查看对应的html代码.从html中我们能看出这是一 ...