python 实现客户端与服务端的通信


Posted in Python onDecember 23, 2020

函数介绍

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中运行服务端代码,运行结果:

python 实现客户端与服务端的通信

在cmd中运行客户端代码,运行结果:

python 实现客户端与服务端的通信

以上就是python 实现客户端与服务端的通信的详细内容,更多关于python 客户端与服务端的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python EOL while scanning string literal问题解决方法
Sep 18 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
Python中正则表达式的用法总结
Feb 22 Python
Python PyCharm如何进行断点调试
Jul 05 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
python的reverse函数翻转结果为None的问题
May 11 Python
python适合做数据挖掘吗
Jun 16 Python
Python爬虫之Selenium实现窗口截图
Dec 04 Python
Python实现京东抢秒杀功能
Jan 25 Python
Python音乐爬虫完美绕过反爬
Aug 30 Python
python实现excel公式格式化的示例代码
Dec 23 #Python
python 基于opencv实现图像增强
Dec 23 #Python
python接口自动化框架实战
Dec 23 #Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 #Python
python实现发送QQ邮件(可加附件)
Dec 23 #Python
如何通过安装HomeBrew来安装Python3
Dec 23 #Python
python实现定时发送邮件到指定邮箱
Dec 23 #Python
You might like
php 魔术函数使用说明
2010/02/21 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
深入理解Django的中间件middleware
2018/03/14 Python
深入浅析Python中的迭代器
2019/06/04 Python
Django Celery异步任务队列的实现
2019/07/24 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
办公室文书岗位职责
2013/12/16 职场文书
党员承诺践诺书
2014/05/20 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
辩护意见书
2015/06/04 职场文书
Java8中Stream的一些神操作
2021/11/02 Java/Android
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android