python实现点对点聊天程序


Posted in Python onJuly 28, 2018

用Python实现点对点的聊天,2个程序,一个是client.py,一个是server.py,通过本机地址127.0.0.1连接进行通信,利用多线程把发送消息和接收消息分开独立进行。

client代码:

import socket
import sys
import threading
import time
 
class client():
 def __init__(self):
  self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  self.ip = "127.0.0.1"
 
 def connect(self):
  try:
   self.s.connect((self.ip,8888))
   print("connect success")
   print('connect time: '+time.ctime())
  except ConnectionError:
   print('connect error')
   sys.exit(-1)
  except:
   print('unexpect error')
   sys.exit(-1)
 
 def send_sth(self):
  while True:
   sth=input('say something:\n')
   try:
    self.s.sendall(sth.encode('utf-8'))
   except ConnectionError:
    print('connect error')
    sys.exit(-1)
   except:
    print('unexpect error')
    sys.exit(-1)
 
 def receive(self):
  while True:
   try:
    r=self.s.recv(1024)
    print ('get message:'+r.decode('utf-8'))
   except ConnectionError:
    print('connect error')
    sys.exit(-1)
   except:
    print('unexpect error')
    sys.exit(-1)
 
c1 = client()
c1.connect()
threading._start_new_thread(c1.receive,())
c1.send_sth()

server代码:

import socket
import sys
import threading
import time
 
def server():
 def bind():
  HOST='127.0.0.1'
  s.bind((HOST,8888))
  print("bind ok")
 
 def listen():
  s.listen(10)
  print ('Socket now listening')
 
 def send_sth(conn):
  while True:
   try:
    sth=input('say something:\n')
    conn.sendall(sth.encode('utf-8'))
   except ConnectionError:
    print('connect error')
    sys.exit(-1)
   except:
    print('unexpect error')
    sys.exit(-1)
 
 def recv(conn):
   while True:
   try:
    data=conn.recv(1024)
    data2=data.decode('utf-8')
    print('get message:'+data2)
   except ConnectionError:
    print('connect error')
    sys.exit(-1)
   except:
    print('unexpect error')
    sys.exit(-1)
 
 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 bind()
 listen()
 conn,addr=s.accept()
 print("connect success")
 print('connect time: '+time.ctime())
 threading._start_new_thread(recv,(conn,))
 send_sth(conn)
 
if __name__=='__main__':
 server()

开启多线程有2种方法,上面2个程序都是用函数的方法,还有一种方法是用类继承threading类

代码:

import socket
import threading
class client(threading.Thread):
 def __init__(self,sth):
  threading.Thread.__init__(self)
  self.sth=sth
 def run(self):
  s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  ip="127.0.0.1"
  try:
   s.connect((ip,8888))
  except :
   print('con error')
   exit()
  #print("connect success")
  s.sendall(self.sth.encode('utf-8'))
  #print("send success")
  try:
   r=s.recv(1024)
  except:
   print('recv error')
   exit()
  print (r.decode('utf-8'))
c1=client('hello 1')
c1.start()
c2=client('hello 2')
c2.start()

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

Python 相关文章推荐
Python使用openpyxl读写excel文件的方法
Jun 30 Python
Python登录注册验证功能实现
Jun 18 Python
python实现对csv文件的列的内容读取
Jul 04 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
对python的输出和输出格式详解
Dec 08 Python
Python控制Firefox方法总结
Jun 03 Python
python实现的自动发送消息功能详解
Aug 15 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
Python利用逻辑回归分类实现模板
Feb 15 Python
Django+Uwsgi+Nginx如何实现生产环境部署
Jul 31 Python
基于python实现聊天室程序
Jul 27 #Python
Python中return self的用法详解
Jul 27 #Python
TensorFlow打印tensor值的实现方法
Jul 27 #Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 #Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 #Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 #Python
Python解决走迷宫问题算法示例
Jul 27 #Python
You might like
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
php生成EXCEL的东东
2006/10/09 PHP
PHP闭包实例解析
2014/09/08 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
jQuery实现日历效果
2020/09/11 jQuery
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
python学习数据结构实例代码
2015/05/11 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
Python requests模块session代码实例
2020/04/14 Python
基于matplotlib xticks用法详解
2020/04/16 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
中学生学习生活的自我评价
2013/10/26 职场文书
学生自我鉴定
2013/12/18 职场文书
2014年母亲节寄语
2014/05/07 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
学校政风行风整改方案
2014/10/25 职场文书
企业法人任命书
2015/09/21 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python