python3实现基于tcp协议的聊天室

网络编程 专栏收录该内容
1 篇文章 0 订阅

python3实现基于tcp协议的聊天室

这是一个用python实现的,简单的基于tcp协议的聊天室小程序,
程序中只能client先发送数据给server,
client 和 server 一人一句 相互回复,
先运行server,再运行client,client向server发送消息,
每当一方发送“bye”时结束聊天,完成一次监听

# 基于tcp协议的聊天室(服务端)
import socket


class ChatRoomServer:

    # 建立套接字
    def create_socket(self):
        return socket.socket(socket.AF_INET, socket.SOCK_STREAM) #通讯类型,套接字类型

    # 绑定和监听
    def bind_listen(self, socket):
        socket.bind(('192.168.1.110', 1996)) #服务端的ip和post
        socket.listen(3) #监听数量,3次连接结束后停止服务

    # 收发数据
    def revc_send(self, socket):
        for _ in range(3):
            c_socket, c_addr = socket.accept() # 接受连接

            while True:
                # 接收客户端的数据
                c_data = c_socket.recv(1024).decode("gbk") #接收1024的字节大小
                print("client:", c_data)
                if "bye" == c_data:
                    print("client结束聊天")
                    break

                # 给客户端发数据
                s_data = input("server:")
                c_socket.send(s_data.encode("gbk"))
                if "bye" == s_data:
                    print("server聊天结束")
                    break

            c_socket.close()
        print("服务停止...")

    # 关闭套接字
    def close_socket(self):
        socket.close()


if __name__ == '__main__':
    chat = ChatRoomServer()
    socket = chat.create_socket()
    chat.bind_listen(socket)
    chat.revc_send(socket)
    chat.close_socket()

# 基于tcp协议的聊天室(客户端)
import socket


class ChatRoomClient:

    # 建立连接
    def create_socket(self):
        return socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定ip
    def bind_ip(self, socket):
        socket.bind(("192.168.1.110", 2580)) #客户端的ip和host

    # 收发数据
    def recv_send(self, socket):
        socket.connect(("192.168.1.110", 1996)) #服务端的ip和post
        while True:

            # 发送数据
            c_data = input("client:")
            socket.send(c_data.encode("gbk"))
            if "bye" == c_data:
                print("client结束聊天")
                break

            # 接收数据
            s_data = socket.recv(1024).decode('gbk')
            print("server:", s_data)
            if "bye" == s_data:
                print("server结束聊天")
                break
        socket.close()


if __name__ == '__main__':
    chat = ChatRoomClient()
    socket = chat.create_socket()
    chat.bind_ip(socket)
    chat.recv_send(socket)

如有bug或其它问题欢迎随时提出,相互学习!

  • 0
    点赞
  • 0
    评论
  • 9
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值