python每日小程序2 简易聊天室_客户端

原理

见上一篇,服务端的博文

客户端的代码

from socket import *
import threading
import time
import atexit

class Client(object):
    def __init__(self):
        a = input('请输入用户名:')
        self.name = a
        #可以设置需要的用户的信息

    def getname(self):
        return self.name
    
class ChatRoom_c(object):
    def __init__(self):
        '''
        初始化变量
        '''
        self.server_addr = ('127.0.0.1',8899)
        self.client = Client()
        self.s = None

    def connect(self):
        '''
        连接到服务器
        '''
        self.s = socket()
        self.s.connect(self.server_addr)
        #第一次连接的时候,把用户名发过去
        self.send(f'[name] {self.client.name}')

    def send(self,message):
        '''
        发送消息
        '''
        self.s.send(message.encode('utf-8'))
        
    def recv(self):
        '''
        接收服务器发送过来的消息
        '''
        a = self.s.recv(1024)
        return  a.decode('utf-8')

    def loop_send(self):
        '''
        循环发送消息
        '''
        while True:
            a = input()
            self.send(a)

    def loop_recv(self):
        '''
        一直循环的接受服务器发过来的消息,并打印出来
        '''
        while True:
            a = self.recv()
            print(a)
            time.sleep(1)
    
    def main(self):
        '''
        连接,然后开启两个线程,一直获取服务器的消息,一边可以输入发给服务器
        不用join()让主线程等待子线程是为了,在你结束的时候,可以正常的结束所有子线程
        '''
        self.connect()
        a = threading.Thread(target=self.loop_send)
        b =  threading.Thread(target=self.loop_recv)
        a.start()
        b.start()

    def clean(self):
        '''
        程序结束时,告诉服务器我离开聊天室,然后关闭socket
        '''
        print('程序退出了...')
        self.send('[stop]')
        self.s.close()

    


if __name__ == "__main__":
    a = ChatRoom_c()
    a.main()
    atexit.register(a.clean)


使用方法(linux中)

  1. 把服务端代码保存,如 Server.py
  2. 把客户端代码保存,如Client.py
  3. 先运行Serverpython3 Server.py
  4. 另一个终端,运行Client python3 Client.py,输入用户名,如kalpa
  5. 多运行几个Client,自己决定多少个,开启另外的终端,重复上一步
  6. 在其中一个Client输入消息
  7. 此时可以在Server终端看到收到了消息,然后除了发送的Client,其他的Client也收到了消息
  8. Client要退出时,使用Ctrl-C退出程序,此时,会发送一个TCP告诉服务器我要退出,然后关闭套接字
  9. 不退出,可重复6

截图

服务器,客户端通信

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值