python实现socket客户端和服务端简单示例

下面是详细讲解"Python实现Socket客户端和服务端简单示例"的攻略。

什么是Socket?

Socket是网络编程的基础,它是一个通信端点,用于实现TCP、UDP等传输协议。

Socket的分类

Socket可以分为两种类型:

  • TCP Socket:提供面向连接的通信,能够保证数据的可靠性,使用TCP协议;
  • UDP Socket:提供不可靠的数据报服务,使用UDP协议。

Python中的Socket

Python中提供了socket模块,可以轻松实现Socket功能。该模块将Socket的所有方法和函数都进行了封装,使用起来非常便捷。

使用socket模块时需要注意的是,客户端和服务端都需要创建一个Socket对象,只需要指定不同的参数即可。

下面将展示两个简单的Python Socket示例。

示例1:TCP Socket服务端与客户端通信

1. 创建服务端Socket套接字

在服务端中,通过socket库创建一个TCP套接字。

import socket

def tcp_server(ip, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((ip, port))
    s.listen(5)
    connection, address = s.accept()
    while True:
        data = connection.recv(1024)
        if not data:
            print("Connection closed.")
            break
        print(f"Received data: {data.decode('utf-8')}")
        connection.sendall(data)

    connection.close()
    s.close()

if __name__ == '__main__':
    tcp_server('127.0.0.1', 8888)

2. 创建客户端Socket套接字

在客户端中,通过socket库创建一个TCP套接字。

import socket

def tcp_client(ip, port, message):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((ip, port))
    s.sendall(message.encode())
    response = s.recv(1024)
    print(f"Received data: {response.decode('utf-8')}")

    s.close()

if __name__ == '__main__':
    tcp_client('127.0.0.1', 8888, "Hello, world!")

3. 运行示例

  • 分别在服务端和客户端运行上述代码
  • 当客户端发送数据后,服务端将回传相同的数据

示例2:UDP Socket服务端与客户端通信

1. 创建服务端Socket套接字

在服务端中,通过socket库创建一个UDP套接字。

import socket

def udp_server(ip, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((ip, port))
    while True:
        data, address = s.recvfrom(1024)
        if not data:
            print("Connection closed.")
            break
        print(f"Received data: {data.decode('utf-8')}")
        s.sendto(data, address)

    s.close()

if __name__ == '__main__':
    udp_server('127.0.0.1', 8888)

2. 创建客户端Socket套接字

在客户端中,通过socket库创建一个UDP套接字。

import socket

def udp_client(ip, port, message):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.sendto(message.encode(), (ip, port))
    response, address = s.recvfrom(1024)
    print(f"Received data: {response.decode('utf-8')}")

    s.close()

if __name__ == '__main__':
    udp_client('127.0.0.1', 8888, "Hello, world!")

3. 运行示例

  • 分别在服务端和客户端运行上述代码
  • 当客户端发送数据后,服务端将回传相同的数据

总结

以上是Python实现Socket客户端和服务端的简单示例,其中包括TCP和UDP两种Socket示例,示例完整讲解了Socket原理和基本使用方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现socket客户端和服务端简单示例 - Python技术站

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

相关文章

  • python 多进程共享全局变量之Manager()详解

    Python多进程共享全局变量之Manager()详解 在Python中,多进程编程是一种常见的并发编程方式。然而,由于多进程之间的内存是相互独立的,因此默认情况下无法直接共享全局变量。为了解决这个问题,Python提供了Manager()类,它可以创建一个共享的命名空间,使多个进程可以访问和修改其中的变量。 使用Manager()创建共享变量 首先,我们需…

    other 2023年7月29日
    00
  • 【X86】—X86处理器大小端的数据存储验证

    【X86】—X86处理器大小端的数据存储验证 背景 在计算机领域中,数据存储是一项非常重要的工作,而计算机中对于数据存储采取的方式则可以分为两种,即大端存储和小端存储。其中,大端存储是指高位字节存储在低地址中,而小端存储则是指高位字节存储在高地址中。 而对于X86架构的处理器而言,它采用的是小端存储方式。这也就意味着,在X86处理器中,字节序是低位字节排…

    其他 2023年3月28日
    00
  • ascii与hex对照转换表

    当然,我可以为您提供有关“ASCII与Hex对照转换表”的完整攻略,以下是详细说明: ASCII与Hex对照转换表 ASCII码是一用于表示字符的标准编码系统,它将每个字符映射到一个唯一的数字值。Hex(十六进制)是一种数值系统,它使用16个数字(0-9和A-F)数字和字符。在计算机科学中,Hex常用于表示二进制数据,因为它比二进制更易于阅读和理解。以下是A…

    other 2023年5月7日
    00
  • Spring框架开发scope作用域分析总结

    Spring框架开发scope作用域分析总结 1. 什么是作用域(scope)? 在Spring框架中,作用域(scope)指的是对象的生命周期和可见性范围。Spring提供了多种作用域,每种作用域都有不同的特点和适用场景。 2. Spring框架中的作用域类型 2.1 Singleton Singleton是Spring框架默认的作用域,也是最常用的作用域…

    other 2023年8月19日
    00
  • Java Native关键字原理及作用解析

    Java Native关键字原理及作用解析 什么是Java Native关键字? Java Native关键字指的是Java编程语言中用于声明原生方法的关键字。原生方法指的是用非Java语言编写的方法,在Java程序中调用这些方法时需要使用Java Native技术和Java Native Interface (JNI)。 Java Native的作用是什么…

    other 2023年6月26日
    00
  • Mac下用Java调用c/c++的思路详解

    Mac下用Java调用c/c++的思路详解 简介 Java是一门便于开发和跨平台的编程语言,而c/c++是性能优异的编程语言,如何在Java程序中调用c/c++代码是很多开发人员所关注的问题。 本文将介绍在Mac环境下使用Java调用c/c++代码的思路,包括JNI技术、编写本地函数库和使用开源库等方法。 JNI技术 JNI是Java Native Inte…

    other 2023年6月26日
    00
  • vue中使用echarts从后端获取数据并赋值显示

    Vue中使用ECharts从后端获取数据并赋值显示 ECharts是一个基于JavaScript的开源可视化库,可以用于创建各种类型的图表。在Vue中使用ECharts可以轻松地创建交互式图表,并从后端进行显示。以下是关于Vue中使用ECharts从后端获取数据并赋值显示的完整攻略,包括两个示例说明。 步骤1:安装ECharts 在Vue中使用ECharts…

    other 2023年5月9日
    00
  • ContentType控制输出的类型是否区分大小写

    ContentType是一个HTTP头部字段,用于指示服务器返回的响应的内容类型。在某些情况下,ContentType的值是否区分大小写可能会影响到服务器的行为。 在大多数情况下,ContentType的值是不区分大小写的,这意味着不同的大小写形式都会被服务器接受并处理。例如,以下两个ContentType的值被认为是相同的: Content-Type: t…

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