python3.0环境下利用tkinter模块的可视化编写的基于TCP的可视化社交平台(客户端)的实现

9 篇文章 0 订阅
1 篇文章 0 订阅

源代码:

"""
Version 1.1.0
Author lkk
Email lkk199404@163.com
DESC 基于TCP的界面社交平台(客户端)的实现
"""
import tkinter
from tkinter import *
import threading
import socket
import time
# 定义服务器信息
HOST = '192.168.11.203'
PORT = 8888
ADDRESS = (HOST, PORT)
BUFFER = 1024
ck = None  # 用于储存客户端的信息
users = {}  # 用户字典,也可以连接数据库


def get_info():
    while True:
        data = ck.recv(BUFFER)  # 用于接受服务其发送的信息
        print(data.decode('utf-8'))
        if data == '退出':
            ck.close()
            break
        else:
            if ':' in data.decode('utf-8'):
                print(data.decode('utf-8'))
                text.insert(tkinter.INSERT, data.decode("utf-8"))  # 显示在信息框上
            else:
                lstNE.insert('end', data.decode('utf-8'))


def insert_user():  # 将用户名插入到显示好友列表中
    Insert = lstNE.get(lstNE.curselection())
    send_to.delete(0, 'end')
    send_to.insert(0, Insert)


def connect_server():
    global ck
    user_str = e_user.get()
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # socked所准守ipv4或ipv6,和相关协议的
    client.connect(ADDRESS)  # 连接ip和端口号!!!1:注意输入的端口号是str型而这里的要传入int型
    #  2:bind()的参数是一个元组的形式
    client.send(user_str.encode("utf-8"))
    ck = client

    t = threading.Thread(target=get_info)
    t.start()


def send_mail():

    friend = send_to.get()
    send_str = entrySend.get(0.0, 2.0)
    text.insert(INSERT, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + '\n'+'我:' + send_str)
    entrySend.delete('0.0', END)
    send_str = friend + ":" + send_str
    ck.send(send_str.encode("utf-8"))


def cancel():
    entrySend.delete('0.0', END)  # 取消发送消息,即清空发送消息


# 实现退出系统函数
def exit_system():
    """
    程序退出的函数
    """
    sys.exit(1)


def login_sever():
    connect_server()
    root.deiconify()
    win1.withdraw()


# 结束回话
def shout_down():
    friend = send_to.get()
    send_str1 = '退出'
    send_str1 = friend + ":" + send_str1
    ck.send(send_str1.encode('utf-8'))
    root.destroy()
    win1.update()
    win1.deiconify()

# 下面是关于界面的操作
# 主界面


win1 = tkinter.Tk()
win1.title('客户端登录')
win1.geometry('400x500+200+300')
win1.resizable(width=False, height=False)  # 宽不可变, 高可变,默认为True
e_user = tkinter.Variable()
labelUse = tkinter.Label(win1, text='昵称:', font=('楷体', 16)).place(x=65, y=80)
entryUser = tkinter.Entry(win1, font=('楷体', 16), width=17, textvariable=e_user).place(x=135, y=80)
input_password = tkinter.Label(win1, text='密码:', font=('楷体', 16)).place(x=65, y=150)
input_password_entry = tkinter.Entry(win1, show='*', font=('楷体', 16), width=17).place(x=135, y=150)
no_login = tkinter.Button(win1, text='退出', font=('楷体', 14), command=exit_system).place(x=150, y=200)
button = tkinter.Button(win1, text='登录', font=('楷体', 14), command=login_sever).place(x=250, y=200)
# 子界面
root = tkinter.Tk()
root.withdraw()
# 设置窗口标题
root.title("PY1808")
root.geometry('940x700')
root.resizable(width=False, height=False)  # 宽不可变, 高可变,默认为True
lstNE = tkinter.Listbox(root, height=33, width=30)
lstNE.place(x=720, y=55)
text = tkinter.Text(root, height=20, width=59, font=("楷体", 18))
text.place(x=0, y=55)
label_text = tkinter.Label(root, text="聊天记录", font=('楷体', 14)).place(x=0, y=30)
e_send = tkinter.Variable()
label_send = tkinter.Label(root, text="发送消息处", font=('楷体', 14)).place(x=0, y=530)
entrySend = tkinter.Text(root, height=5, width=51, font=('楷体', 20))
entrySend.place(x=0, y=550)
e_friend = tkinter.Variable()
label_friend = tkinter.Label(root, text="发送给:", font=('楷体', 14))
label_friend.place(x=550, y=10)
button1 = tkinter.Button(root, text='选择好友', width=10, command=insert_user)
button1.place(x=790, y=10)
send_t = tkinter.StringVar()
send_to = tkinter.Entry(root, bg="pink", font=('楷体', 14), width=15, textvariable=send_t)
send_to.place(x=630, y=10)
button2 = tkinter.Button(root, text="发送(S)", width=10, command=send_mail).place(x=635, y=650)
button3 = tkinter.Button(root, text="清除(C)", width=10, command=cancel).place(x=545, y=650)
button4 = tkinter.Button(root, text='退出', width=10, command=shout_down).place(x=850, y=650)
root.mainloop()
win1.mainloop()

运行截图:

点击登录按钮之后运行截图:

服务端:

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
服务端: 服务端程序启动之后弹出窗口,管理员输入IP、端口等信息之后点击启动按钮,服务器启动,服务端窗口自动关闭,之后跳转至服务端信息展示界面,包含用户上线提醒,用户发送信息记录展示。 客户端: 客户端程序启动之后,需要弹出登录界面,当用户成功输入昵称、密码、端口、IP等信息(考虑到用户权限问题,本程序在后台默认有固定IP、端口,)用户只需输入昵称、密码(密码用于后期连接数据库时用来匹配数据库存储的用户信息)。当用户成功输入用户名。昵称、密码等信息客户端登录成功跳转至用户进行端对端的聊天界面。聊天界面大致分为聊天记录展示界面,在线好友信息界面以及用户发送信息处。用户在发送消息处输入想要发送的文本消息,选择在线好友中的好友昵称点击选择好友即可选中您要发给的好友昵称,然后点击发送按钮,即可将消息发送给所选择的好友,同时将信息展示在自己的聊天界面中的聊天记录处 2.2. 功能要求 §2.2.1服务端功能要求: 当管理员输入服务器IP、以及端口等信息之后点击启动按钮之后,服务端正常启动之后,需要保持一直开机状态满足所有用户不论在何时登录之后都能进行与好友之间的聊天交流等,同时服务端还要满足监控用户登录信息,不同用户登录客户端之后,服务器后台能够看到某某客户上线了等提示信息。用于服务端查看好友在线状态同时作为服务器,还要能够监控用户的聊天记录,用于监控用户不能发送一些不利言论,从而将其用户及时作封号处理。阻止其传播一些不健康的言论。 §2.2.2客户端要求: 用户在登录界面输入昵称、密码等信息之后成功登录之后,进行窗口之间的跳转,由登录窗口跳转至进行用户之间的聊天窗口,之前的登录窗口也要随之消失。在聊天窗口之中用户需要根据好友在线信息情况选择自己想要与其进行聊天的对象。用户点击在线好友的昵称点击选择好友即可向该好友发送信息,发送成功之后同时要将其发送的信息以及时间信息展示在自己的窗口之中,同时也要在指定好友的窗口之中有所显示以及时间信息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值