一个python程序——聊天

本文来自麦兜响当当的同名博文

这几天学了python的一点网络编程和Tkinter的GUI界面编程,今天大体用一下,编一个简单的双工的聊天软件,当然功能是再简单不过了,只是能
收发消息,显示消息而已,就当玩玩了,目前写了一点点代码,基本能实现收消息和显示收到的消息了,当然客户端的界面我也没有做,还是停留在Shell上收
发,服务器端界面做了,不过界面做的很丑,而且不能显示汉字(有待改进),服务器向客户端发也没做。

当然,这里面有很多问题的,目前来说有些我还解决不了。现在的程序中我只是用到了两个线程,都是两个无限循环,一个是socket的收,一个是Tkinter的mianloop。

先看一下目前写的一点server端得代码吧,挺乱的,多半天的成果就成这样啦。widget应该是Text的,这里用了Listbox和Entry有些不妥。

# -*- coding: cp936 -*-

from Tkinter import *
from time import ctime
from socket import *
import thread

class ChatInterFace(object):
   def __init__(self,initinfo=None):
       self.top=Tk()
       self.top.title(‘PPChat server v1.0‘)
       self.top.geometry(‘450x550‘)

self.MessageOut=Listbox(self.top,fg=‘red‘)
       self.MessageOut.pack(expand=1,fill=BOTH)
  
       
       
       self.MessageIn=Entry(self.top,fg=‘red‘)
       self.MessageIn.pack(padx=20,pady=50,fill=BOTH)

#发送消息按钮
       self.sendMesgButton=Button(self.top,text=‘send‘,width=10,command=self.SendMessageTo)
       #self.sendMesgButton.bind("<Return>",self.SendMessageTo)
       self.sendMesgButton.pack(side=BOTTOM and
RIGHT,padx=20,pady=10)
       #self.sendMesgButton.focus_set()

def
SendMessageTo(self):        #let the message from the Entry displayed in Listbox
       message=self.MessageIn.get()
       if message:
           self.MessageOut.insert(END,‘you said [%s]:‘% ctime())
           self.MessageOut.insert(END,message)

self.MessageOut.insert(END,‘‘)
           self.MessageIn.delete(0,message.__len__())
       else:
           pass

def main():
   d=ChatInterFace()
   HOST=‘localhost‘
   PORT=71628
   BUFSIZ=1024
   ADDR=(HOST,PORT)

ChatSerSock=socket(AF_INET,SOCK_DGRAM)
   ChatSerSock.bind(ADDR)
   def socketproc():
       while True:
           data,addr=ChatSerSock.recvfrom(BUFSIZ)
           #print ‘received from %s : [%s]:%s‘ % (addr[0],ctime(),data)
           d.MessageOut.insert(END,‘your friend said [%s]:‘ % ctime())
           d.MessageOut.insert(END,data)

d.MessageOut.insert(END,‘‘)
           
     
       ChatSerSock.close()
   thread.start_new_thread(socketproc,())
   thread.start_new_thread(mainloop,())

if __name__==‘__main__‘:
   main()

这里用的UDP的连接。

客户端我还是用的上次那个最简单的。

from socket import *
from time import ctime

HOST=‘localhost‘
PORT=71628
BUFSIZ=1024
ADDR=(HOST,PORT)

ChatCliSock=socket(AF_INET,SOCK_DGRAM)

while True:
   data = raw_input(‘>‘)
   if not data:
       break
   ChatCliSock.sendto(data,ADDR)
   data,ADDR = ChatCliSock.recvfrom(BUFSIZ)
   if not data:
       break
   print data

ChatCliSock.close()

运行结果是:

先运行server。

可以自己在Entry中输入要发的消息,点send可以发送(目前发生函数没有完成,只能显示)比如我们在Entry中输入Display
your message in the listbox。

点send。

随即Entry中的内容清除,而在listbox中显示。

然后我们运行客户端程序。并在提示符下输入内容“can you receive my message?" 回车。

然后看到界面:

消息已经收到。

刚学了两三天的socket和Tkinter,献丑了。

接下来,有空的时候我会完善其他功能的。我的理想是,必须有登陆界面,登陆后弹出收发界面。可以设置通信端口,IP地址等。方便的按钮多几个。。。。。。。。等等吧,不知道行不行。。。。。

时间: 2024-11-07 12:49:45

一个python程序——聊天的相关文章

3. 第一个python程序

学习任何一门语言的第一步,首先要写个'hello world',这算是程序员的一个传统.但在写之前,还有注意几个问题. 首先,python是一门脚本语言,而脚本语言的特点就是:我们写的代码会先由解释器进行编译以后,再去执行.但是当我们的程序运行在操作系统之上时,系统并没有那么智能,能够自动识别出我们要用哪个解释器去解释我们的代码(windows则通过后缀名关联执行程序,所以不用声明也可以,但是我们的代码更多在linux上运行,所以解释器的声明算是必须的),所以,我们必须要声明我们的解释器是什么.

python 调 用另一个python 程序

na = int(input("开奖时间(如:20140630): \n")) import time nb =  int(time.strftime("%Y%m%d")) #获取当前时间的年月日 #print (nb) #获取键盘输入 a = True while a:     if nb < na:         import os         os.system("python shuangseqou.py")         

对“第一个Python程序”的改进

概述: 本程序主要是模仿<Python核心编程>中3.6节--第一个Python程序,并在其基础上做了一些小的改进,而改进的要求则是来源于第三章的课后练习题. 本篇博客的一个核心问题就是在我们如何避免重复制造轮子. 课本源程序: 这里不对课本上的源程序作过多地讲解,因为课本本身就说得非常清楚而且易懂. 改进需求: 1. 可以创建新的文件: 2. 可以读取新的文件: 3. 可以让用户选择创建或是读取文件. 看到上面的需求,可以你的第一感觉就是,哦,这个太简单了.不就是把之前写过的代码在这里复制粘

第一个 Python 程序 - Email Manager Demo

看了一些基础的 Python 新手教程后,深深感觉到 Python 的简洁与强大,这是我的第一个 Python Demo.下面是完整代码与执行截图. 代码: # encoding: utf-8 ''' @author: Techzero @email: [email protected] @time: 2014-4-30 下午1:31:04 ''' import os import sys import cPickle as p class Person: def __init__(self,

1.2第一个python程序

编写第一个python程序 <1>编写python程序方法1 打开"超级终端"  2.输入python3 ,输入python3表示用的python这门编程语言的第3个版本,如果只输入python的话表示用的是python的第2个版本  3.输入以下代码 print("hello world") <2>编写python程序方法2 打开编辑软件sublime  把以下代码,编写如下代码  保存代码  运行程序 <3>另外一种运行pyt

第一个Python程序(4)----再回首恍然入门

每一次别离都是为了更好地相遇,吻过了你的额头再次吻上你厚厚的双唇. -------hashlinux 现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用"复制"-"粘贴"把代码从页面粘贴到你自己的电脑上.写程序也讲究一个感觉,你需要一个字母一个字母地把代码自己敲进去,在敲代码的过程中,初学者经常会敲错代码,所以,你需要仔细地检查.对照,才能以最快的速度掌握如何写程序. 在交互式环境的提示符>

Python学习笔记一:第一个Python程序,变量,字符编码与二进制,用户交互程序

第一个python程序 Windows:设置环境变量,X:\pthonxxx,xxx是版本号 在命令提示符下 输入python,进入解释器 >>>print("Hello World!") >>>exit() 编辑文件helloworld.py 执行:python helloworld.py Linux:./helloworld.py   声明解释器:#!/usr/bin/env python  在环境变量中找python Chmod 755 hel

Python学习——第一个Python程序

(我只是个搬砖的:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431611988455689d4c116b2c4ed6aec000776c00ed52000) 现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你自己的电脑上.写程序也讲究一个感觉,你需要一个字母一

第一个Python程序 与

现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你自己的电脑上.写程序也讲究一个感觉,你需要一个字母一个字母地把代码自己敲进去,在敲代码的过程中,初学者经常会敲错代码,所以,你需要仔细地检查.对照,才能以最快的速度掌握如何写程序. 在交互式环境的提示符>>>下,直接输入代码,按回车,就可以立刻得到代码执行结果.现在,试试输入100+200,看看计算结果是不是300: >&g