局域网内服务端与客户端通信程序

本文介绍了使用Python的serversocket库和pysimplegui库实现局域网内的服务端与客户端通信程序。服务端通过重写BaseRequestHandler的setup、handle和finish方法进行通信处理,客户端则使用socket库并注意关闭连接的方式。同时,文章展示了如何使用pysimplegui创建客户端和服务器的交互界面。
摘要由CSDN通过智能技术生成

局域网内服务端与客户端通信程序

前言

All right, bitches and hoes. 好久不见集美们,本可儿华丽回归写文章噜,虽然只是一些赔钱的小心得,也权当是记录一下吧。这次写的是关于局域网服务端和客户端的通信程序,使用到的是python语言。

使用工具

serversocket库
pysimplegui库(使用这个库真的很方便,但是本可人翻遍了全站几乎没有找到合适的中文教程文章。有些文章看起来是翻译了,实则没有一点用处)

核心代码

服务端

class ThreadingTCPServer(socketserver.ThreadingMixIn,socketserver.TCPServer):#继承ThreadingMixIn,使其支持多线程
    pass
    
class Server(socketserver.BaseRequestHandler):
    def setup(self):
        connection_pool.append(self.request)
        connection_name.append(self.client_address)
        msg = '服务端已连接,你的客户序号为{}'.format(len(connection_pool)-1) # 客户端连接上了,服务器发送的消息
        self.request.sendall(msg.encode('utf-8'))
        print_msg(server_name,'{}已连接'.format(self.client_address))

    def handle(self):
        while True:
            try:
                data = self.request.recv(1024).decode('utf-8')
                if len(data) == 0:#判断链接已经断开
                    connection_pool.remove(self.request)
                    connection_name.remove(self.client_address)
                    break
                else:
                    commute_from = connection_name.index(self.client_address)
                    print_msg('{} to {}'.format(commute_from,server_name), data)
            except:
                connection_name.remove(self.client_address)
                connection_pool.remove(self.request)

    def finish(self):
        print_msg(server_name,'{}退出连接'.format(self.client_address))

分析:这个类继承自BaseRequestHandler类,是服务端用于处理socket对象通信的主类。实现处理socket通信,需要重写BaseRequestHandler类中的三个方法:setup、handle和finish。类中的调用方法顺序为setup()–>handle()–>finish()。handle方法中的while True循环用于一直等待接受客户端发来的消息。
客户端

class Client:
    def __init__(self,ip,port):
        self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.s.connect(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值