iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >Python基于socket如何实现TCP/IP客户和服务器通信
  • 253
分享到

Python基于socket如何实现TCP/IP客户和服务器通信

2023-06-15 09:06:19 253人浏览 安东尼
摘要

这篇文章主要为大家展示了“python基于Socket如何实现tcp/IP客户和服务器通信”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python基于socket如何实现TCP/IP客户和服务

这篇文章主要为大家展示了“python基于Socket如何实现tcp/IP客户和服务器通信”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python基于socket如何实现TCP/IP客户和服务器通信”这篇文章吧。

简单的搭建服务器与客户端

既然已经了解了套接字的应用。下面,我们来实现一个简单的单向通信TCP/IP服务器与客户端。

服务器

服务器的原理如下:

  • 首先创建一个套接字,TCP是面向流的套接字。故需要使用SOCK_STREAM

  • 然后使用bind()函数将套接字与服务器地址关联(因为我们只是在本地测试,直接将地址设置为127.0.0.1或者localhost,端口号为10000),当然你身边如果有2台电脑设备,可以直接替换局域网的IP地址

  • 调用listen()函数将套接字设置为服务器模式,然后无限循环等待,参数为最大排队数

  • 在循环中,调用accept()等待客户端的消息连接。如果有客户端进行连接,那么accept()函数会返回一个打开的连接与客户端地址

  • 指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据

  • 通过sendall()进行回传客户端数据

  • 传回数据后,与当前的客户端通信就算完成了。需要使用close()进行关闭清理

示例代码如下:

import socket# 1.创建一个套接字,sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.使用bind()函数将套接字与服务器地址关联sock.bind(('localhost', 10000))# 3.调用listen()函数将套接字设置为服务器模式sock.listen(1)while True:    # 4.调用accept()等待客户端的消息连接    # 如果有客户端进行连接,那么accept()函数会返回一个打开的连接与客户端地址    connection, client_address = sock.accept()    print("连接客户端地址:", client_address)    try:        # 5.指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据        data = connection.recv(1024)        print(data)        if data:            # 6.通过sendall()进行回传客户端数据。            connection.sendall("已接受到数据".encode())        else:            print("客户端没有发送数据,不需要传送数据")    finally:        #7.需要使用close()进行关闭清理        connection.close()

客户端

实现客户端相对来说比服务器要简单的多,因为其不需要监听,只需要连接发送数据即可。客户端实现主要分为:

  • 创建一个套接字

  • 使用connect()函数连接到服务器

  • 通过sendall()向服务器发送数据

  • 通过recv()接受服务器传递回的数据

  • 交互完成之后,使用close()关闭清理

示例如下:

import socket# 1.创建一个套接字,sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.使用bind()函数将套接字与服务器地址关联sock.connect(('localhost', 10000))try:    msg = b"Are you there?"    # 3.通过sendall()向服务器发送数据    sock.sendall(msg)    # 4.通过recv()接受服务器传递回的数据    data = sock.recv(1024)    print(data.decode())finally:    # 5.交互完成之后,使用close()关闭清理    sock.close()

运行之后,服务器与客户端交互效果如下:

Python基于socket如何实现TCP/IP客户和服务器通信

Python基于socket如何实现TCP/IP客户和服务器通信

create_connection(更简易的客户端)

连接服务器除了使用connect()函数之外,其实还有另一个函数create_connection()来连接服务器,它可以省略几个步骤。示例如下:

import socket# 获取匹配开头字符串的所有属性值def getConstants(prefix):    return {        getattr(socket, n): n        for n in dir(socket)        if n.startswith(prefix)    }    ipproto_str = getConstants("IPPROTO_")family_str = getConstants("AF_")type_str = getConstants("SOCK_")sock = socket.create_connection(('127.0.0.1', 10000))print(ipproto_str[sock.proto])print(family_str[sock.family])print(type_str[sock.type])try:    msg = b"Are you there?"    sock.sendall(msg)    data = sock.recv(1024)    print(data.decode())finally:    sock.close()

运行之后,效果如下:

Python基于socket如何实现TCP/IP客户和服务器通信

create_connection()函数的原理是使用getaddrinfo()函数查找候选连接的参数,并返回一个打开的socket。getaddrinfo()函数的讲解内容在上一篇socket库(点击跳转查看)。

以上是“Python基于socket如何实现TCP/IP客户和服务器通信”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网服务器频道!

--结束END--

本文标题: Python基于socket如何实现TCP/IP客户和服务器通信

本文链接: https://www.lsjlt.com/news/279341.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作