小小聊天室Python代码实现

作者:Marksinoberg 时间:2022-05-27 15:23:44 

相对于Java方式的聊天室,Python同样可以做得到。而且可以做的更加的优雅。想必少了那么多的各种流的Python Socket,你一定会喜欢的。
至于知识点相关的内容,这里就不多说了。

UDP方式

服务器端


# coding:utf-8

# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = 创建一个简单的套接字监听请求

import socket

HOST = '192.168.59.255'
PORT = 9998

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('',PORT))
print '套接字已启动!'
while True:
data,addr = s.recvfrom(1024)
print addr,str(' : ')+data

客户端


# coding:utf-8

# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = socket的客户端的简单实现

import socket

PORT = 9998
HOST = '192.168.59.255'
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
words = raw_input('Client:')
while words != 'quit':
s.sendto(words,(HOST,PORT))
words = raw_input('Client:')
s.close()

是不是很简单啊。我们需要注意的就是socket的第二个参数为SOCK_DGRAM。因为这和TCP方式的SOCK_STREAM 有所不同。

TCP方式

服务器端


# coding:utf-8

# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = 简单的tcpsocket的实现

from socket import *
from time import ctime

HOST = ''
PORT = 9999
BUFFERSIZE = 1024
ADDRESS = (HOST,PORT)

s = socket(AF_INET,SOCK_STREAM)
s.bind(ADDRESS)
s.listen(5)

while True:
print 'Waiting for clients cennect!'
tcpclient,addr = s.accept()
print 'Connected By ',addr

while True:
 try:
  data = tcpclient.recv(BUFFERSIZE)
 except Exception,e:
  print e.message
  tcpclient.close()
  break
 if not data:
  print "No Data received!"
  break
 senddata = 'Hi,you send me:[%s]%s'%(ctime(),data.encode('utf8'))
 tcpclient.send(senddata.encode('utf8'))
 print addr,' Says:',ctime(),data.encode('utf8')

tcpclient.close()
s.close()

 客户端


# coding:utf-8

# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = 简单的tcp socket客户端的实现

from socket import *

class TcpClient:
# HOST = 'localhost'
PORT = 9999
HOST = '192.168.59.225'
BUFFSIZ = 1024
ADDR = (HOST,PORT)
def __init__(self):
 self.client = socket(AF_INET,SOCK_STREAM)
 self.client.connect((self.HOST,self.PORT))

while True:
  senddata = raw_input('>>>')
  if not senddata:
   print 'Please input some words!\n>>>'
   continue
  if senddata == "quit":
   break
  self.client.send(senddata.encode('utf8'))
  recvdata = self.client.recv(self.BUFFSIZ)
  if not recvdata:
   break
  print recvdata.encode('utf8')

if __name__ == "__main__":
client = TcpClient()

TCP方式演示结果:(注意先开启服务器端)

服务器端

D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/sockettest/SimpleTCPServer.py
Waiting for clients cennect!
Connected By  ('192.168.59.225', 63095)
('192.168.59.225', 63095)  Says: Thu Jul 07 16:01:10 2016 Hello World
('192.168.59.225', 63095)  Says: Thu Jul 07 16:01:15 2016 haode
No Data received!
Waiting for clients cennect!

客户端

D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/sockettest/SimpleTcpClient.py
>>>Hello World
Hi,you send me:[Thu Jul 07 16:01:10 2016]Hello World
>>>
Please input some words!
>>>
>>>haode
Hi,you send me:[Thu Jul 07 16:01:15 2016]haode
>>>quit

Process finished with exit code 0

总结

简单的使用TCP或者是UDP确实很容易,然而要想更好的利用这两个协议,就需要好好的设计一番了。

这里我想强调的是,注意tcp和udp创建套接字时指定的参数即可。

来源:http://blog.csdn.net/marksinoberg/article/details/51852241

标签:python,聊天室
0
投稿

猜你喜欢

  • Go语言defer的一些神奇规则示例详解

    2023-10-18 05:03:01
  • asp如何在数据库中用好Transaction?

    2010-06-22 21:07:00
  • Python版微信红包分配算法

    2022-04-10 12:48:22
  • Python协程asyncio异步编程笔记分享

    2022-03-05 22:23:31
  • PHP函数原理理解详谈

    2023-06-04 01:56:59
  • 在asp中用集合成批操作数据库

    2008-03-10 17:22:00
  • ASP编程入门进阶(十):Global.asa文件

    2008-07-12 07:05:00
  • PHP获取类中常量,属性,及方法列表的方法

    2023-11-19 19:57:58
  • Python计算矩阵的和积的实例详解

    2021-06-06 10:09:34
  • 在go文件服务器加入http.StripPrefix的用途介绍

    2023-06-26 07:19:07
  • 只有mdf文件的数据库附加失败的修复方法分享(置疑、只读)

    2012-02-12 15:55:17
  • 土豆网前端概况

    2008-01-24 12:06:00
  • js全选/全不选/反选 checkbox代码

    2008-03-18 13:00:00
  • Sublime Text4 配置 Python3 环境、代码提示、编译报错的解决方案

    2021-09-24 12:00:03
  • 兼容所有浏览器的设为首页与显示小策略

    2009-01-12 18:50:00
  • Python爬虫实现“盗取”微信好友信息的方法分析

    2023-01-16 09:37:33
  • 完美解决Python matplotlib绘图时汉字显示不正常的问题

    2023-09-28 05:30:55
  • python实现学生信息管理系统(面向对象)

    2022-06-13 16:16:07
  • Python实现获取视频时长功能

    2021-11-25 03:33:57
  • python使用requests模块实现爬取电影天堂最新电影信息

    2021-02-21 22:44:44
  • asp之家 网络编程 m.aspxhome.com