小小聊天室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


猜你喜欢
- [root@vm1 ~]# rpm -ivh groundwork-foundation-pro-1.6.1-67.noarch.rpm P
- 第一种情况os.system('ps aux')执行系统命令,没有返回值第二种情况result = os.popen(
- 大概五年前吧,我那时还在为一家约会网站做开发工作。他们是早期创业公司,但他们也开始拥有了一些稳定用户量。不像其他约会网站,这家公司向来以洁身
- 元数据简介元数据 (metadata) 最常见的定义为“有关数据的结构数据”,或者再简单一点就是“关于数据的信息”,日常生活中的图例、图书馆
- 最近听说一个很好玩的图灵机器人api,正好可以用它做一个微信聊天机器人,下面是实现# test.pyimport requestsimpor
- XHTML结构: <div id="myFocus-wrap"> <div id="myFo
- Mac 环境中既有自带的 Python2.7 也有自己安装的 Python 3.5.1,默认想用 Python3 的环境1. 添加 Pyth
- 代码如下def PI(n): pi=0 for k in range(n): pi +=
- 关于如何获取 access_token 这个可以自己查百度开放的OAuth 2.0 的 API。这里不做介绍。第三方 Python 库pos
- 首先我们放出tf2.0关于tf.keras.layers.Conv2D()函数的官方文档,然后逐一对每个参数的含义和用法进行解释:tf.ke
- 一、桥接模式桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来。(类)抽象部分(Abstracti
- 示例一:直接编写AJAX 实现。 客户端: 代码如下:<!DOCTYPE html PUBLIC &qu
- 在刚进公司的时候,要写一个需求,使用django的admin站点管理,实现一个二级联动的功能,因为要用到django自带的页面,因为不是自定
- 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,一般在配置部署mysql环境时都会在mysql的m
- 关于vue的过渡效果,vue官方给的概述是这样的。Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。包括以下工具:1
- 感想我们在做深度学习处理图片的时候,如果是自己制作或者收集的数据集,不可避免的要对数据集进行处理,然后大多数模型都只支持RGB格式的图片,这
- 本文实例讲述了Python使用matplotlib绘制多个图形单独显示的方法。分享给大家供大家参考,具体如下:一 代码import nump
- 本文实例讲述了Python求两个文本文件以行为单位的交集、并集与差集的方法。分享给大家供大家参考。具体实现方法如下:s1 = set(ope
- 发现问题python嵌套列表大家应该都不陌生,但最近遇到了一个问题,这是工作中遇到的一个坑,首先看一下问题raw_list = [[&quo
- 默认情况下,Python DB API会返回不带字段的结果,这意味着你得到的是一个列表,而不是一个字典。花费一点性能代价之后,你可以返回一个