1.socket流程介绍

这里主要介绍以TCP为主的socket,即基于连接的会话,流程如图,解释如下:

  • step1 服务端需要创建一个socket对象;用bind()函数绑定一对用于连接的IP地址和端口号port;然后用listen()函数侦听打开的端口;用accept()函数接收来自客服端的请求,此时返回两个参数,一个是客户端的ip/port, 一个是客户端与服务端之间建立的连接,后续的通信都是这个连接进行的。接下来客户端就可以向服务器发起请求了。
  • step2 客户端同样需要创建一个socket对象,并用connet()方法连接服务器,传入服务器的ip/port。
  • step3 接下来客户端服务端之间就可以通过各自的socket对象,用recv()和sendall()函数发送数据了。
  • step4 通信结束以后,客户端与服务端的socket都需要进行close()操作,以关闭连接。

2.Python代码实现

服务端

关于如何查看本地IP地址:windows: 命令行用ipconfig命令, 即可查看

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
服务端
localhost:服务端的IP地址,str型
port: 服务端开放的端口号,int型
"""import socket# 创建服务端socket对象
server_sk = socket.socket()# bind()/listen()/sccept()
server_sk.bind((localhost, port))
server_sk.listen()
conn, address = server_sk.accept()# 基于accept()函数返回的连接conn进行通信
conn.sendall(bytes("欢迎光临!\n 按q结束聊天哦!", encoding='utf-8'))
while True:ret = str(conn.recv(1024), encoding='utf-8')if ret == 'q':breakelse:conn.sendall(bytes("我已经收到:" + ret, encoding='utf-8'))# 关闭连接
server_sk.close()

客户端

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
客户端
IP:服务端的IP地址,str型
port:服务端的端口号,int型
"""import socket# 创建socket对象
client_sk = socket.socket()# 连接服务端
client_sk.connect((IP, port))# 通信
print(str(client_sk.recv(1024), encoding='utf-8'))
while True:inp = input("请输入:")client_sk.sendall(bytes(inp, encoding='utf-8'))if inp == 'q':breakelse:print(str(client_sk.recv(1024), encoding='utf-8'))
# 关闭连接
client_sk.close()

3.注意事项

  • accept(), recv(), 这两个函数是阻塞的。
  • 对于服务端的accept(),在服务端程序运行过程中,如果没有客服端向服务器发起请求,那么accept()会一直等着,程序不会执行accept()以下的程序,直到有客户端向服务端发起请求。
  • 对于recv()函数,无论是客户端还是服务端,只要运行到recv()函数,那么如果对端没有向自己发送数据(即sendall()),那么recv()函数会一直等着,程序不会运行recv()以下的代码,直到对端向自己发送数据。因此客户端/服务端的sendall()/recv()函数是成对使用的。
  • socket在传输数据的时候是按照字节传输的,因此用sendall()函数时,需要将字符串转化为字节类型;同理,用recv()函数时,需要将字节类型的数据转化为字符串。
  • 上述代码中,recv()函数中传入的值【1024】,代表自己一次接收多少个字节的数据。

Python实现socket简单一对一聊天相关推荐

  1. python实现socket简单通信

    python实现socket简单通信 首先先来简单介绍下socket: (具体更详细介绍的可以在网上找找,都讲得非常详细),这里主要是我自己的一些理解. socket是在应用层与传输层之间的一个抽象层 ...

  2. 通过python 构建一个简单的聊天服务器

    构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使 ...

  3. python开发一个简单的聊天室

    使用python的twisted框架编写一个简单的聊天室 下面是基本架构 基本架构图 -- coding:utf-8 -- from twisted.internet.protocol import ...

  4. java中socket实现一对一聊天

    要求:使用socket实现简单聊天机器人功能,客户端发给服务端一句话,服务端返回一句话(可以是固定的"你好",也可以是随机的),当客户端输入exit时结束对话. 总体思想: 创建s ...

  5. python+pysimplegui+socket开发登录聊天室

    目录 项目结构 服务器端 客户端 共有 代码 配置信息 服务器端 functions.py senddata.py server.py 客户端 cilpboard.py listening.py sp ...

  6. python 使用socket建立小型聊天室

    一个聊天室,由两个部分组成.服务端和客户端.服务端接收客户端发来的消息,并将接收到的消息发送给其他客户端.客户端负责发送消息到服务端,并接收来自服务端发送的来自其他客户端的消息. 示例图(服务端和客户 ...

  7. python socket编程 实现简单p2p聊天程序

    转载自:https://www.cnblogs.com/wuxie1989/p/7204887.html python socket编程 实现简单p2p聊天程序 目标是写一个python的p2p聊天的 ...

  8. 【Java线程】简单实现带界面的一对一聊天

    实现原理: 1.构建好窗体,在窗体中创建好相应的布局和控件: 2.为相应的控件(按钮:监听.连接.发送)添加事件: 3.使用到两个线程: a.监听线程:获取服务器端输入的端口号,构建socket,监听 ...

  9. python聊天室详细教程_python简单实现聊天室功能(代码教程)

    聊天室程序需求: 我们要实现的是简单的聊天室的例子,就是允许多个人同时一起聊天,每个人发送的消息所有人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.如下图: 这里我们首先要 ...

最新文章

  1. 【Nginx】epoll事件驱动模块
  2. idea2019.x配置Gradle
  3. XStream – XStreamely使用Java中的XML数据的简便方法
  4. COPAN为政府机构提供低成本、高效节能的数字归档方案
  5. 什么是spooling技术 他有哪几部分组成_气调保鲜冷库有哪几部分组成?
  6. 封装element分页组件
  7. hashmap扩容_原创 | 我说我了解集合类,面试官竟然问我为啥HashMap的负载因子不设置成1!?
  8. 《商务与经济统计》学习笔记(七)—各统计分布知识点归纳
  9. 解决安装TortoiseSVN时,提示 Windows-Update(kb2999226)
  10. javascript 图片上传并显示
  11. Lync server 2013 部署开发常用工具下载
  12. CVPR2020论文列表(中英对照)
  13. 在Flask中上传本地图片到服务器
  14. Ubuntu Linux 8.04系统下智能拼音输入法
  15. python为什么是蛇的天敌_蛇的天敌有哪些:蛇的天敌排名
  16. 每日一课 | Python处理文件系统的10种方法
  17. Layui提示说明弹框
  18. Qmail的配置文件详解
  19. 【经验分享】打通“任督”二脉——企业数字化转型中如何构建DevOps能力体系?
  20. 用Matlab编程实现图像的傅立叶变换和逆变换并显示出来

热门文章

  1. Romance of three kingdom
  2. 模糊综合评判法实现学生互评
  3. 输入字符串,输出字符串中出现次数最多的字母及其出现次数。如果有多个字母出现次数一样,则按字符从小到大顺序输出字母及其出现次数。
  4. 实现手机来电铃声,通知铃声、警告铃声等音频定制化功能(一,添加扫描分区myimage)
  5. pixel手机救砖教程
  6. 编程爱好者网站试题中心
  7. 请广大编程爱好者加入QQ群5907439
  8. android线刷软件,android线刷一般用什么软件?哪一个好用一些?
  9. android studio manifest merger failed,【Androidstudio】Manifest merger failed 问题
  10. 怎么在mysql数据库中放图片_如何将图片储存在MySQL数据库中