Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】

Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】

1. TCP/IP协议简介

  • TCP: 面向连接的传输控制协议
  • IP: 网际协议,负责把数据从一个网络节点传送到另一个网络节点。

TCP/IP 协议是互联网的基础协议,是互联网最重要的基础设施之一。

2. Python中的 socket 套接字

Python 中的 socket 模块提供了对网络编程中常用的一些套接字操作的封装。

使用套接字进行网络编程的一般步骤

  • 创建 socket 套接字对象
  • 绑定 IP 地址和端口号(仅服务端需要)
  • 监听客户端连接请求(仅服务端需要)
  • 接收客户端请求并响应(仅服务端需要)
  • 连接服务端并发送数据(仅客户端需要)
  • 接收服务端发送的数据(仅客户端需要)

2.1 创建 socket对象

import socket

# TCP Client
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# TCP Server
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

socket.AF_INET 使用 IPv4 进行通信,socket.SOCK_STREAM 指定使用 TCP 进行通信。

2.2 绑定服务端IP地址和端口号

# 绑定 IP 地址和端口号
server_socket.bind(('localhost', 8000))

2.3 监听客户端连接请求

# 开始监听
server_socket.listen()

# 接受客户端连接
conn, addr = server_socket.accept()

2.4 接收客户端请求并响应

# 接收客户端请求
data = conn.recv(1024)

# 响应客户端请求
conn.sendall(data)

2.5 连接服务端并发送数据

# 建立连接
client_socket.connect(('localhost', 8000))

# 发送数据
client_socket.sendall(b'Hello, world!')

# 接收数据
data = client_socket.recv(1024)

# 解码数据并打印
print(data.decode())

3. 示例:创建 TCP 客户端和服务端

3.1 创建 TCP 服务端

import socket

def tcp_server():
    # 创建 socket 对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定服务器地址和端口号
    server_socket.bind(('localhost', 8000))

    # 开始监听
    server_socket.listen()

    print('服务器已启动,等待客户端连接...')
    while True:
        # 接受客户端连接请求
        conn, addr = server_socket.accept()
        print('客户端已连接', addr)

        # 接收客户端请求并响应
        data = conn.recv(1024)
        conn.sendall(data)

        # 关闭连接
        conn.close()

if __name__ == '__main__':
    tcp_server()

3.2 创建 TCP 客户端

import socket

def tcp_client():
    # 创建 socket 对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 建立连接
    client_socket.connect(('localhost', 8000))

    # 发送数据
    client_socket.sendall(b'Hello, world!')

    # 接收数据
    data = client_socket.recv(1024)

    # 解码数据并打印
    print(data.decode())

    # 关闭连接
    client_socket.close()

if __name__ == '__main__':
    tcp_client()

以上示例实现了一个基本的 TCP 服务端和客户端连接、发送和接收数据的功能,代码简洁,易于理解。可以用于开发网络数据传输、通信或者数据采集等任何应用场景。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 360N7怎么开启开发者选项?360手机N7开启开发者选项教程

    下面是360手机N7开启开发者选项的完整攻略,包含详细的步骤和示例说明。 1. 打开手机设置 第一步,打开360N7手机的“设置”应用。可以在桌面或者应用列表中找到。 2. 找到手机版本号 在设置页面中,向下滑动,找到“关于手机”或者类似的选项,点击进入。 在“关于手机”页面中,可以找到“版本号”的选项,点击进入。 3. 点击多次版本号 在“版本号”页面中,…

    other 2023年6月26日
    00
  • C语言的isatty函数和ttyname函数以及sendmsg函数用法

    C语言是一种广泛使用的编程语言,涉及到很多系统底层的 API,而 isatty 函数、ttyname 函数以及 sendmsg 函数也是这其中的一部分。 isatty 函数 isatty 函数用于判断一个文件描述符是否是终端设备。其原型如下: int isatty(int fd); 其中,fd 为文件描述符,返回值表示是否是终端设备,是返回 1,否则返回 0…

    other 2023年6月27日
    00
  • 主页面与iframe页面之间的javascript函数的调用

    主页面与iframe页面之间的javascript函数的调用 在前端开发过程中,常常会使用iframe页面嵌入到主页面中,以实现页面的局部刷新和动态效果等。在这种场景下,我们经常需要在主页面中调用iframe页面中的javascript函数,或者在iframe页面中调用主页面中的javascript函数。本文将介绍如何在两个页面之间进行javascript函…

    其他 2023年3月28日
    00
  • 批处理中Copy与Xcopy命令的区别小结

    下面是“批处理中Copy与Xcopy命令的区别小结”的完整攻略。 前言 在批处理中,复制文件是我们常见的操作之一。我们通常会用到两个命令,分别是Copy和Xcopy。这两个命令虽然都可以进行复制操作,但实际上有一些区别。在本文中,我们将对这两个命令做一个小结,让大家更好的理解它们之间的区别。 Copy命令 Copy命令是最基本的复制命令,可以用来将一个或多个…

    other 2023年6月26日
    00
  • C语言中static的使用介绍

    下面是关于C语言中static使用介绍的详细讲解攻略。 什么是static变量? 在C语言中,我们使用static关键字来定义静态变量。通常情况下,我们都是在函数内部定义变量,而且默认情况下这些变量都是自动变量,意味着这些变量的作用域仅限于定义它们的函数范围内。静态变量就是与这些自动变量不同的。 静态变量与自动变量的区别 区别主要有两点: 静态变量存储在静态…

    other 2023年6月27日
    00
  • win10更新后无限重启不能开机怎么办 电脑无限重启解决教程

    Win10更新后无限重启不能开机怎么办? 如果你的电脑在更新Win10后遇到了无限重启且无法开机的问题,可以尝试以下解决方案。 1. 使用安全模式修复 在重启电脑时,多次按下F8键,进入安全模式。然后使用以下命令修复: bootrec /fixmbr bootrec /fixboot bootrec /rebuildbcd 如果以上命令的修复失败,可以尝试使…

    other 2023年6月26日
    00
  • 【前端基础】动态脚本与JSONP

    前端基础:动态脚本与JSONP的完整攻略 动态脚本和JSONP是前端开发中常用的两种技术,用于实现跨域请求和动态加载脚本。本文将为您提供一份完整攻略,包括概念介绍、示例说明等。 动态脚本 动态脚本是一种在页面加载过程中动态加载脚本的技术。它可以通过创建script元素并将其添加到DOM中来实现。动态脚本通常用于加载第三方脚本、跨域请求等场景。 示例1:动态加…

    other 2023年5月5日
    00
  • Java 多线程使用要点分析

    Java 多线程使用要点分析 什么是多线程 多线程是指程序同时运行多个线程,每个线程执行不同的任务。多线程的使用可以提高程序的效率,加快程序的执行速度。在Java中,通过使用Thread类来创建和管理线程。 多线程的使用要点 1. 创建线程对象 创建线程对象的方法有两种: 继承Thread类并重写run方法 实现Runnable接口并实现run方法 1.1 …

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部