python 实现客户端与服务端的通信
作者:Superme 时间:2023-11-19 01:28:33
函数介绍
Socket对象方法:
服务端:
函数 | 描述 |
---|---|
.bind() | 绑定地址关键字,AF_INET下以元组的形式表示地址。常用bind((host,port)) |
.listen() | 监听TCP,可以挂起的最大连接数,该值至少为1,一般设为5即可 |
.accept() | 被动接受TCP客户端的连接 |
客户端:
函数 | 描述 |
---|---|
.connect() | 初始化服务器连接 |
.connect_ex() | 是对connect()函数的扩展,当出错时返回出错码,不报异常 |
其它函数:
函数 | 描述 |
---|---|
.recv() | 接收数据,数据以字符串的形式返回,bufsize指定接收的最大数据量。 |
.send() | 发送数据,将string中的数据发送到连接的套接字,返回值是要发送的字节数量,通常使用.encode()函数对数据进行转码 |
.senddall() | 发送完整的数据,在返回之前会尝试发送所有数据,成功返回None,失败则抛出异常。 |
.recvfrom() | 与recv()函数类似,不同的是返回值是(data,address),其中data是包含接收数据的字符串,address是发送数据的套接字地址。 |
.sendto() | 发送UDP数据,将数据发送到套接字,形式是(ipaddr,port)的元组。 |
.close() | 关闭套接字 |
服务端
使用socket函数来创建一个socket对象,并设置一个socket服务,然后通过bind(hostname,port)函数来指定一个端口,使用socket对象的accept方法,等待客户端的连接,并返回connection对象。
具体步骤为:
创建服务端套接字
serversocket=socket()
把地址绑定到套接字
serversocket.bind()
对连接进行监听
serversocket.listen()
使用一个while进行循环,并接收客户端的连接
while True:
serverclient=serversocket.accept()
while True:
#接收已发送
serverclient.recv()
serverclient.send()
#关闭客户端套接字
serverclient.close()
关闭服务端套接字
serversocket.close()
具体代码实现:
import socket
import sys
import time
serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host=socket.gethostname()#获取本地主机名
port=9999
#绑定端口号
serversocket.bind((host,port))
#设置最大连接数
serversocket.listen(5)
while True:
print('服务器启动,监听客户端链接')
clientsocket,addr=serversocket.accept()
print('链接地址:%s' % str(addr))
while True:
try:
data=clientsocket.recv(1024)
except Exception:
print('断开的客户端:',addr)
break
print('客户端发送内容:',data.decode('utf-8'))
reply=input('回复:').strip()
if not reply:
break
msg=time.strftime('%Y-%m-%d %X')#获取结构化时间戳
msg1='[%s]:%s'% (msg,reply)
clientsocket.send(msg1.encode('utf-8'))
clientsocket.close()
serversocket.closel()
实现功能:通过while实现循环接收客户端发送的数据,并对客户端发送的数据进行显示并返回给客户端数据,返回给客户端的数据信息后加入时间戳。
客户端
创建一个客户端用来连接以上服务的的服务,使用socket.connect()方法打开一个TCP连接到主机,连接后可以从服务端获取数据,在操作完成后关闭连接。 具体步骤为: ``` 创建客户端的套接字 client=socket() 尝试连接服务器 client.connect() 发送并接收数据 client.send() client.recv() 关闭客户端套接字 client.close() ``` **具体代码实现:**
import socket
import sys
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host=socket.gethostname()
port=9999
s.connect((host,port))
while True:
data= input('>>').strip()
if not data:
break
s.send(data.encode('utf-8'))
msg=s.recv(1024)
if not msg:
break
print(msg.decode('utf-8'))
s.close()
测试
使用cmd命令行中打开到代码所在文件目录,执行python 服务端文件名.py,再另打开一个cmd命令界面执行 python 客户端文件名.py
在pycharm中运行服务端代码,运行结果:
在cmd中运行客户端代码,运行结果:
来源:https://www.cnblogs.com/supershuai/p/12286933.html
标签:python,客户端,服务端,通信
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
用JavaScript实现单继承和多继承的简单方法
2024-04-23 09:15:33
golang日志框架之logrus的使用
2024-04-25 15:17:45
![](https://img.aspxhome.com/file/2023/7/134117_0s.png)
python中列表添加的四种方法小结
2023-12-10 21:59:47
![](https://img.aspxhome.com/file/2023/7/71337_0s.png)
分享Python文本生成二维码实例
2023-12-16 09:42:28
详解vue页面首次加载缓慢原因及解决方案
2024-05-25 15:19:45
![](https://img.aspxhome.com/file/2023/6/123706_0s.png)
C#调用python.exe使用arcpy方式
2021-03-30 05:41:13
![](https://img.aspxhome.com/file/2023/8/71078_0s.jpg)
Django实战之用户认证(用户登录与注销)
2023-03-23 16:52:26
![](https://img.aspxhome.com/file/2023/9/88889_0s.png)
python通过re正则表达式切割中英文的操作
2021-11-29 04:41:23
如何使用MyBatis Plus实现数据库curd操作
2024-01-21 17:37:13
![](https://img.aspxhome.com/file/2023/9/99919_0s.png)
python中Django文件上传方法详解
2021-12-31 13:40:41
MS SQL2000 数据库自动备份方法
2010-07-22 19:52:00
Python入门教程(二十二)Python的类和对象
2021-11-22 06:00:56
Java使用正则表达式验证用户名和密码的方法
2023-06-13 18:05:56
详解Python的Django框架中manage命令的使用与扩展
2021-01-04 05:09:27
一篇文章带你深入了解Mysql触发器
2024-01-14 15:42:35
python OpenCV学习笔记直方图反向投影的实现
2021-01-12 09:16:44
![](https://img.aspxhome.com/file/2023/0/120940_0s.jpg)
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2023-10-03 13:44:57
![](https://img.aspxhome.com/file/2023/5/63235_0s.png)
python异常中else的实例用法
2021-02-05 06:18:56
Python实现爬取天气数据并可视化分析
2023-02-09 00:33:14
![](https://img.aspxhome.com/file/2023/1/90881_0s.jpg)
SQL Server SA权限最新入侵方法
2009-03-25 16:56:00