小小聊天室Python代码实现
admin
2023-08-01 15:39:49
0

相对于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创建套接字时指定的参数即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...