#客户端
import socket
import threading
import tkinter
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 5550))flag = False
class Connection:def __init__(self):self.win = tkinter.Tk()  # 创建主窗口self.win.title('登陆界面')self.win.geometry("400x400+200+20")self.labelName = tkinter.Label(self.win, text='账号').grid(row=0, column=0)self.labelPasswd = tkinter.Label(self.win, text='密码').grid(row=2, column=0)self.name = tkinter.Variable()self.word = tkinter.Variable()self.entryName = tkinter.Entry(self.win, textvariable=self.name).grid(row=0, column=1)self.entryPasswd = tkinter.Entry(self.win, show='*',width =20,textvariable= self.word).grid(row=2, column=1)self.text = tkinter.Text(self.win, height=10, width=20)self.text.grid(row=5, column=1)self.labeltext = tkinter.Label(self.win, text='消息').grid(row=5, column=0)self.button1 = tkinter.Button(self.win, text="连接", command=self.connect).grid(row=8, column=1)self.win.mainloop()def connect(self):username = self.name.get()password = self.word.get()userinfo = username + '$' + passwordsock.send(userinfo.encode())info = sock.recv(1024).decode()if info == '0':printStr = "账号或密码失败\n"self.text.insert(tkinter.INSERT, printStr)returnelse:printStr = "welcome to server!\n"self.text.insert(tkinter.INSERT, printStr)global flagflag = Trueself.win.destroy()                                          #连接成功关闭窗体class Communicate:def __init__(self):self.win = tkinter.Tk()  # 创建主窗口self.win.title('聊天室')self.win.geometry("400x300+200+20")self.mesg = tkinter.Variable()  # 发送的信息self.labelmesg = tkinter.Label(self.win, text='说话').grid(row=4, column=0)self.entrymesg = tkinter.Entry(self.win, textvariable=self.mesg).grid(row=4, column=1)self.text = tkinter.Text(self.win, height=10, width=40)self.text.grid(row=5, column=1)self.labeltext = tkinter.Label(self.win, text='消息').grid(row=5, column=0)button2 = tkinter.Button(self.win, text="发送", command=self.sendThreadFunc).grid(row=8, column=2)th2 = threading.Thread(target=self.recvThreadFunc)th2.setDaemon(True)th2.start()self.win.mainloop()def sendThreadFunc(self):try:myword = self.mesg.get()self.mesg.set('')sock.send(myword.encode())if myword =='exit':printStr = "你的聊天结束\n"self.text.insert(tkinter.INSERT, printStr)sock.close()except ConnectionAbortedError:printStr = "服务器终止了连接\n"self.text.insert(tkinter.INSERT, printStr)sock.close()except ConnectionResetError:printStr = "服务器崩了\n"self.text.insert(tkinter.INSERT, printStr)sock.close()def recvThreadFunc(self):while True:try:otherword = sock.recv(1024).decode()otherword = otherword +'\n'if otherword:self.text.insert(tkinter.INSERT, otherword)else:passexcept ConnectionAbortedError:printStr = "服务器终止了连接\n"self.text.insert(tkinter.INSERT, printStr)sock.close()breakexcept ConnectionResetError:printStr = "服务器崩了\n"self.text.insert(tkinter.INSERT, printStr)sock.close()breakdef shut_down(self):self.win.destroy()#--------------------------用户窗体if __name__ =='__main__':deng = Connection()if flag :liao = Communicate()
#服务器端
import socket
import threadingsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind(('localhost', 5550))sock.listen(5)
print('Server', socket.gethostbyname('localhost'), 'listening ...')mydict = dict()
mylist = list()account = {'123':'123','456':'456','root':'xiuwenL'}
name = ['123','456','789']# 把whatToSay传给除了exceptNum的所有人
def tellOthers(exceptNum, whatToSay):for c in mylist:#if c.fileno() != exceptNum:try:c.send(whatToSay.encode())except:passdef subThreadIn(myconnection, connNumber,nickname):#nickname = myconnection.recv(1024).decode()mydict[myconnection.fileno()] = nicknamemylist.append(myconnection)print('connection', connNumber, ' has nickname :', nickname)tellOthers(connNumber, '【系统提示:' + mydict[connNumber] + ' 进入聊天室】')while True:try:recvedMsg = myconnection.recv(1024).decode()if recvedMsg:if recvedMsg =='exit':                                                          #用户退出mylist.remove(myconnection)print(mydict[connNumber], 'exit, ', len(mylist), ' person left')tellOthers(connNumber, '【系统提示:' + mydict[connNumber] + ' 离开聊天室】')myconnection.close()returnprint(mydict[connNumber], ':', recvedMsg)tellOthers(connNumber, mydict[connNumber] + ' :' + recvedMsg)except (OSError, ConnectionResetError):try:mylist.remove(myconnection)except:passprint(mydict[connNumber], 'exit, ', len(mylist), ' person left')tellOthers(connNumber, '【系统提示:' + mydict[connNumber] + ' 离开聊天室】')myconnection.close()returnwhile True:connection, addr = sock.accept()while True:try:# connection.settimeout(5)suc = Falsebuf = connection.recv(1024).decode()buf = buf.split('$')if buf[0] in account.keys() and buf[1] in account.values() :print('Accept a new connection', connection.getsockname(), connection.fileno())connection.send(b'1')suc = Trueelse:connection.send(b'0')if suc :                        #只有登陆成功才加入线程# 为当前连接开辟一个新的线程mythread = threading.Thread(target=subThreadIn, args=(connection, connection.fileno(),buf[0]))mythread.setDaemon(True)mythread.start()breakexcept:connection.close()

转载于:https://www.cnblogs.com/xiuwenli/p/9675314.html

python-socket作业相关推荐

  1. python实验报告代写_TensorFlow作业代写、代做Python程序语言作业、代写github课程作业、Python实验作业代写...

    TensorFlow作业代写.代做Python程序语言作业.代写github课程作业.Python实验作业代写 日期:2019-07-10 10:34 Python Practical Examine ...

  2. 咕泡学院:(1)唐宇迪python课程作业

    超级详细的python思维导图见链接: https://download.csdn.net/download/m0_37957160/22526313 python数据科学必备工具实战思维导图链接: ...

  3. [Python_7] Python Socket 编程

    0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*-"&qu ...

  4. Python Socket请求网站获取数据

     Python Socket请求网站获取数据 ---阻塞 I/O     ->收快递,快递如果不到,就干不了其他的活 ---非阻塞I/0 ->收快递,不断的去问,有没有送到,有没有送到,. ...

  5. python udp 直播_[Python] socket发送UDP广播实现聊天室功能

    原博文 2018-11-24 12:33 − 一.说明 本文主要使用socket.socket发送UDP广播来实现聊天室功能. 重点难点:理解UDP通讯流程.多线程.UDP广播收发等. 测试环境:Wi ...

  6. 【Python之旅】第五篇(三):Python Socket多线程并发

    1.多线程模块 主要是socketserver模块,如下图示: 2.多线程原理 如下图示说明: 3.SockteServer例子说明 服务器端: 客户端: 4.演示 还是以前面例子,对代码进行修改,作 ...

  7. python编程书籍1020python编程书籍_代写INFT 1020作业、Database作业代做、Java课程作业代写、c++,Python编程作业代做...

    代写INFT 1020作业.Database作业代做.Java课程作业代写.c++,Python编程作业代做 日期:2020-04-25 10:27 INFT 1020 Database Fundam ...

  8. python socket 说明

    一个简单的python socket编程 一.套接字 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并 ...

  9. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  10. python socket sendto sendall_网络通信 Python Socket UDP Select

    前言 工作中遇到各种各样的网络通信.有MQTT和CoAP这样的物联网应用层协议,也有各种自定义的TCP或UDP协议.使用各种不同的计算机语言和框架开发网络通信,例如Java的Netty框架,C语言原始 ...

最新文章

  1. 根据关键字检索相关视频
  2. MySQL数据库备份的10个教程
  3. [译]GLUT教程 - 笔划字体
  4. Flutter布局锦囊---男女性别单选
  5. 基于winsock的局域网聊天室实现
  6. vue+file-saver+xlsx 封装导出Excel表格方法
  7. 基于Java毕业设计缘梦书屋网站源码+系统+mysql+lw文档+部署软件
  8. 阿里云服务器一年多少钱?最便宜的一年
  9. 【IPS安全策略配置】
  10. oracle里面asm的作用,Oracle ASM 详解
  11. 程序员书籍PDF大收集
  12. Android开发前景如何?从0开始的你,连应届生都比不过......
  13. 什么是Smalltalk
  14. 强烈推荐一位改变我命运的程序员大佬!当作礼物送给你!
  15. 机器学习之数学基础 一 .导数
  16. MySql——忘记密码怎么办
  17. 截图神器-Ashampoo Snap 10.0.8 中文免费版
  18. 【Python】小甲鱼课后习题第20、21讲--函数(中)
  19. brew 一直等待_去广告神器,一键去除所有主流App广告,看片从此不等待
  20. 【reverse】逆向5 标志寄存器

热门文章

  1. 豪横!1.3 亿的数据毫秒级???居然做到了!!!
  2. 刺激!我31岁敲代码10年,明天退休!
  3. 架构之每天数十亿次请求的web应用经验分享
  4. “我很迷茫很焦虑,需要你的建议”|她在百度内网发了个求助帖
  5. 从食品质检员到代码工程师,大哥你就这样跳槽进了阿里巴巴?
  6. Shell 神技:掩盖 Linux 服务器上的操作痕迹
  7. Android 还可以走多久?
  8. KNN (K近邻算法) - 识别手写数字
  9. 循环神经网络之LSTM和GRU
  10. dubbo+zookeper与webservice的简单对比