socket 客户端和服务端思考

摘要:
如果客户端断开连接,将报告错误,因为连接突然消失。因为端口不会立即释放。它与系统设置有关。一般业务应该没有问题。可接受自动释放。服务端异常处理。每个服务都分配了一个端口,并且在软件运行时连接不会关闭。服务器端应该使用内置模块serversocket来并发服务器。

accept :连接一个客户端:连接对象, 地址

这个连接断开之前,别的连接是不受理的。如果客户端断开,会报错,因为连接突然没了。

所以,客户端会使用随机端口,但是端口会用完。因为端口不会立即释放。跟系统设置有关,一般的业务应该没有问题,自动释放,是可以接受的。

不对的 !!!:一个端口只用一次。

不对的 !!!:所以,用 bind 固定客户端端口。服务端异常处理。每个服务分配一个端口,软件运行中不关闭连接。

服务端应该使用 内置模块 serversocket,并发服务器。

socket 客户端不允许发送 空字符串,会夯住

socket 服务端,当接受字符串为:0,客户端断开了连接

socket server

import socket
import socketserver

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',5555))
s.listen(5)
cs,address=s.accept() #让服务器可以在close之后接收其他客户端的连接请求
while True:
    data = cs.recv(1024)
    cs.send(b'OK hello world!')
s.close()

socket client

'''socket测试客户端'''
import socket

plc_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
plc_socket.bind(('127.0.0.1',5001))
plc_socket.connect((plc_ip, plc_port))
while 1:
    try:
        plc_socket.send(send_data.encode('utf-8'))
        recv_data = plc_socket.recv(1024)
    except OSError:
        logging.exception('oserror')
        plc_socket.close()



socketserver

'''socket测试服务端'''
import socketserver

class SockeListenServer(socketserver.BaseRequestHandler):
    def handle(self):
        while True:
            try:
                data = self.request.recv(1024)
                self.request.send(b'OK zzz
')
                print("客户端%s发来的消息:%s"%(self.client_address,data.decode('utf-8')))
            except Exception as e:
                print(e)
                break
        self.request.close()
            # 关闭服务(可选操作)
        self.server.shutdown()
            # phone.close()

server = socketserver.ThreadingTCPServer(('127.0.0.1',8501),SockeListenServer)
server.serve_forever()

免责声明:文章转载自《socket 客户端和服务端思考》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP图像处理之在原图像处理Aspose.Words下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

标定设备自动化-ASAP3

欢迎关注《汽车软件技术》公众号,回复关键字获取资料。 1.ASAP3定义 下图选自INCA文档《INCA_IF_ASAM-ASAP3_EN.pdf》说明了ASAP3的用途:标定软件和设备之间(如INCA和发动机台架),通过ASAP3传输数据,实现自动化控制。常见的案例有:INCA作为服务器端,PUMA通过ASAP3读取INCA变量,修改INCA标定量。(...

OSX:设置用户默认浏览器

近期我们遇到的情况是,须要统一设置用户的默认浏览器为Google Chrome。而系统默认的是Safari。 这个设置是系统Launch Services基于用户管理的。 意思就是说,即便是改动了系统全局參数,假设用户有特定设置。那么会依从用户配置。 仅仅要一设计用户配置,那么就会相对麻烦点。要想改变。会涉及多种用户情况,比方:网络用户目录的情况。用户的...

在 UWP 应用中创建、使用、调试 App Service (应用服务)

在 Windows 10 中微软为 UWP 引入了 App Service (即应用服务)这一新特性用以提供应用间交互功能。提供 App Service 的应用能够接收来自其它应用传入的参数进行处理后返回数据。 创建应用服务 要使应用支持提供 App Service 非常简单。只需正确配置应用的清单文件后添加服务相关的代码即可。 配置应用清单文件 打开项...

如何删除eclipse的subclipse插件记住的SVN用户名和密码

如何删除eclipse的subclipse插件记住的SVN用户名和密码找到auth目录,将其以及子目录、子文件都删除。路径在:C:UsersAdministratorAppDataRoamingSubversion其中,AppData要用户自己输入,这个目录是隐藏的。Administrator是这台电脑的用户名。以上方法对win7操作系统有效。  ...

自己封装的Socket组件,实现服务端多进程共享Socket对象,协同处理客户端请求

自己封装的Socket组件,实现服务端多进程共享Socket对象,协同处理客户端请求 DotNet.Net.MySocket是SLB.NET(Server Load Balance服务器负载均衡)项目中的核心组件。 在实际的项目中发现,单进程的服务端处理高并发的客户请求能力有限。 所以一直在考虑能不能象IIS Web园一样,多个进程提供一个服务,协同处理客...

LUA中获得服务器IP

local t ={} --引入相关包local socket = require("socket") functiont.main() local a,b=pcall(t.execute); if a==false then logerror(a,b); end...