python日记(使用TCP实现的对话客户端和服务器)
作者:Dante丶 发布时间:2023-01-25 19:42:54
标签:python,TCP,对话,客户端,服务器
TCP 客户端
一个使用TCP协议实现可连续对话的客户端示例代码:
import socket
# 客户端配置
HOST = 'localhost'
PORT = 12345
# 创建TCP套接字并连接服务器
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST, PORT))
while True:
# 获取用户输入
message = input("请输入要发送的消息:")
# 发送消息到服务器
client_socket.sendall(message.encode("utf-8"))
# 接收服务器传回的消息
data = client_socket.recv(1024)
print(f"收到来自服务器的消息:{data.decode('utf-8')}")
# 关闭套接字
client_socket.close()
在这个示例中,我们首先创建了一个TCP套接字,并使用connect()
函数连接到指定的服务器地址和端口。然后,我们通过用户输入不断发送消息到服务器,并等待服务器响应并显示其结果。请注意,由于TCP是面向连接的协议,因此我们可以通过该连接保证消息的可靠性和顺序性。
最后,我们通过close()
函数关闭套接字。
需要注意的是,当我们使用TCP协议时,需要确保服务端也使用TCP协议进行相应的通信。
TCP 服务端
以下是一个使用TCP协议实现可连续对话的服务端示例代码:
import socket
# 服务器配置
HOST = 'localhost'
PORT = 12345
# 创建TCP套接字并绑定到地址和端口
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
# 监听连接
server_socket.listen()
# 接受连接并与客户端建立通信
client_socket, client_address = server_socket.accept()
print(f"与客户端 {client_address} 建立连接。")
while True:
# 接收客户端传来的消息
data = client_socket.recv(1024)
print(f"来自{client_address}的消息:{data.decode('utf-8')}")
if not data: # 如果客户端关闭了连接,则退出循环
break
# 获取用户输入
message = input("请输入要发送的消息:")
# 发送消息到客户端
client_socket.sendall(message.encode("uft-8"))
# 关闭套接字
client_socket.close()
server_socket.close()
在这个示例中,我们首先创建了一个TCP套接字,并将其绑定到指定的地址和端口。然后,我们通过listen()
函数开始监听客户端连接请求。
当有客户端连接时,我们调用accept()
函数接受连接并返回客户端套接字和地址。然后,我们通过循环不断接收和发送数据,从而实现了可连续对话的功能。
请注意,由于TCP是面向连接的协议,因此我们可以通过该连接保证消息的可靠性和顺序性。最后,我们通过close()
函数关闭套接字。
需要注意的是,在实际开发中,我们可能需要为每个连接创建一个新的线程或进程,以便能够同时处理多个客户端连接。
来源:https://juejin.cn/post/7213203008963936312
0
投稿
猜你喜欢
- 2020.3.7准备scrapy,使用anaconda创建一个新的环境,执行“conda create -n scrapyEnv pytho
- 素数是编程中经常需要用到的。作为学习Python的示例,下面是一个高效求解一个范围内的素数的程序,不需要使用除法或者求模运算。#coding
- 有这样的情形,django个人头像在model中是:class UserProfile(AbstractUser): ""
- 相关性实现统计和数据科学通常关注数据集的两个或多个变量(或特征)之间的关系。数据集中的每个数据点都是一个观察值,特征是这些观察值的属性或属性
- 程序代码: '关键字的搜索 str="select * from tableNam
- 双向链表的基本操作的实现,供大家参考,具体内容如下在之前的博客中介绍了三种链表,分别是单链表、单向循环链表以及双向链表。本篇博客将用Pyth
- 安装pyserialpip install pyserial查看可用的端口# coding:utf-8import serial.tools
- 导言DataList的编辑界面由EditItemTemplate里的标记语言和web控件定义。在目前为止所做的DataList编辑功能的例子
- 一、引用计数基础知识每个php变量存在一个叫 zval 的变量容器中。一个 zval 变量容器,除了包含变量的类型和值,还包括两个字节的额外
- 和大多数的语言脚本一样,学习ASP最好的方法就是亲身尝试ASP,使用你自己的系统安装PWS或者IIS。你可以边学习边在你自己的服务器上测试A
- 豆瓣镜像源:https://pypi.douban.com/simple/file >> setting最后点击OK即可PyCh
- 在用Pycharm运行项目时,不知道干了什么,导致运行后无法像平时那样显示输出结果:最后试了很多种方法,终于解决了:将打勾的地方去掉,不要运
- python是个很好玩的东西?好吧我随口说的,反正因为各种原因(其实到底是啥我也不知道),简单的学习了下python,然后写了一个上传文件上
- 一次性验证码,英文是 One Time Password,简写为 OTP,又称动态密码或单次有效密码,是指计算机系统或其他数字设备上只能使用
- 本文实例讲述了Python通过递归遍历出集合中所有元素的方法。分享给大家供大家参考。具体实现方法如下:''''
- 为什么要引入线程池如果在程序中经常要用到线程,频繁的创建和销毁线程会浪费很多硬件资源,所以需要把线程和任务分离。线程可以反复利用,省去了重复
- 这只是个asp小技巧类的东西,它虽然适合在每个不同文件名里调用这个函数,但是也是有前提的,下面让我们来仔细看看其中的原委。 &n
- 如下所示:# ### 多项分支'''<br>if 条件表达式1: code1
- 当数据文件过大时,由于计算机内存有限,需要对大文件进行分块读取:import pandas as pdf = open('E:/学习
- 数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业、政府等部门最为重要的计算机应用