用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: ")

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: ")

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实现点对点聊天程序相关推荐

  1. 教你如何用python制作黑板模拟器 python 项目小发明 【安安教具】-【工具】-【黑板】模拟器

    黑板模拟器是一个多线程控制尝试,需要做到通过tkinter实现对鼠标的控制和监督.鼠标在移动时会有一个线程来检测鼠标的位置,计算窗口的位置,计算出鼠标在窗口中的位置,结合canvas画布实现对黑板的涂 ...

  2. 如何用python制作温度计模拟器 python项目小发明 【安安教具】-【物理】-【温度计】模拟器

    温度计测量水温的过程要满足如下条件: 1.不能碰烧杯底. 2.不能碰烧杯壁. 设计一款动手实践上面过程的软件,就是接下来要完成的~ 我们先看一下效果: 如何用python制作温度计模拟器 python ...

  3. 如何用html5实现网页聊天,HTML5 WebSocket实现点对点聊天的示例代码

    HTML5的websocket与Tomcat实现了多人聊天,那是最简单也是最基本的,其中注意的就是开发环境,要满足jdk1.7和tomcat8,当然了tom7的7.063也行,在网站上找到了用goog ...

  4. 教你如何用python制作三角形模拟器 python项目小发明 【安安教具】-【数学】-【三角形】模拟器

    三角形的三个点互相连接组成了一个平面图形,我们如何用python制作一个可以展示各种三角形的软件呢? 我们先看看效果: 这个东西要如何使用呢?我们看一下视频: 三角形模拟器 可以看到,控制三角形的三个 ...

  5. 教你用Python制作一款自己的杀毒程序

    在本文中,我们将介绍恶意软件静态分析的基础知识.静态分析是对程序文件的反汇编代码.图形图像.可打印字符串和其他磁盘资源进行分析,是一种不需要实际运行程序的逆向工程.虽然静态分析技术有欠缺之处,但是它可 ...

  6. Python制作【大麦网】抢票程序,看演唱会再也不怕没票了

    前言 大麦网,是中国综合类现场娱乐票务营销平台,业务覆盖演唱会. 话剧.音乐剧.体育赛事等领域. 但是因为票数有限,还有黄牛们不能丢了饭碗,所以导致了,很多人都抢不到票 那么,今天带大家用Python ...

  7. 3行代码,用Python制作一个整蛊朋友的病毒小程序

    前言 就是无聊做出来玩玩的,程序是无害的 前几天朋友一直问我要爬取妹子图片的源码,然后又要爬取妹子视频的源码 被问烦了以后我就打算给他一个小小的惊喜 代码如下: 这一段代码的作用就是一个无限弹窗 让我 ...

  8. 使用Python制作一个照片换底色的exe程序文件(详细教程)

    文章目录 前言 一.安装相对应的库 二.关于图片处理 1.关于RemoveBg 2.图片处理代码编写 3.窗口图片选择以及提示函数 4.可视化窗口 5.打包成exe程序 写在最后 前言 在校大学生,突 ...

  9. python 网页设计_使用Python制作获取网站目录的图形化程序

    1.pyqt4写的界面 find_ui.py #-*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCor ...

  10. 数独游戏python制作_使用Python编写数独游戏自动出题程序

    数独是一个很好玩的游戏,可以锻炼推理能力.下面的代码可以自动生成数独游戏题目. from random import shuffle, randrange def generate(): # 初始网格 ...

最新文章

  1. 运营商部署4.5G热情高涨:将影响5G商用
  2. (golang)HTTP基本认证机制及使用gocolly登录爬取
  3. 美国计算机科学发展,美国计算机工程发展现状
  4. Google编程题:最小操作数
  5. Mendix将升级低代码软件开发平台,发布全新数字化生态系统、行业云
  6. 开关电源中的磁性元件书籍_总结丨PFC开关电源的效率优化措施
  7. linux内核中TCP接收的实现
  8. springboot2.x 集成百度 uidgenerator
  9. 百度音乐高调改名后 掉队的千千音乐还有机会吗?
  10. 海美迪h7四代刷Linux,海美迪H7四代怎么安装第三方软件看电视直播
  11. Netty游戏服务器实战开发(11):Spring+mybatis 手写分库分表策略(续)
  12. 响应式与自适应设计:设计师的最佳选择是什么?
  13. Java实时报表统计查询慢_如何解决报表关联计算中的性能问题
  14. 验证码获取及解加密(模拟人进入网页获取数据)
  15. Apache Lucene - Building and Installing the Basic Demo
  16. 岭南学院python课程作业1
  17. c语言函数可视化,求在已经完成的c语言程序《万年历》中添加可视化效果
  18. 详细的springboot整合activeMq安装与使用(上)
  19. Silverlight4Beta之RichTextArea
  20. 华为路由器命令大全(字典查询)

热门文章

  1. js 作为属性的变量
  2. ASP.NET基本对象介绍
  3. spring与jpa整合 简化persistence.xml配置文件 使用属性文件 数据源dbcp访问数据库...
  4. asterisk queue 队列
  5. 活动目录的介绍:深入浅出Active Directory系列(一)
  6. 关于 Profile
  7. 【VS2010学习笔记】【编程实例】 (在Visual Studio中使用C++创建和使用DLL)
  8. 【第三方软件】利用WIN8系统自带的绘图软件获取图像信息(位置和颜色信息)
  9. MATLAB生成数组
  10. ArcGIS 定义坐标系