• Python网络编程之Socket的简单实现


    一、引入

      关于Python的网络编程,最基础莫过于socket了。

      socket,又称“套接字”,网络上的两个程序如果想要实现双向的数据通信,需要建立连接,这个连接的一端就称为一个socket。

      python中有一个模块socket,在这个模块中可以找到socket()函数,该函数用于创建套接字对象。根据所用协议的不同(TCP/IP和UDP/IP),可以创建两类socket。下面贴上一个TCP/IP类的socket实例。

    二、创建TCP服务器

     1 __author__ = "JentZhang"
     2 
     3 from socket import *
     4 from time import ctime
     5 
     6 HOST = '127.0.0.1'          #服务器地址
     7 PORT = 21136                #服务器端口
     8 BUFIZE = 1024               #接受数据的大小
     9 ADDR = (HOST, PORT)         #创建socket时用到的地址(就是将服务器地址和端口写成一个元组的形式)
    10 
    11 tcpSerSock = socket(AF_INET, SOCK_STREAM)   #创建socket连接(AF_INET表示IPV4,SOCK_STREMAM表示TCP协议 )
    12 tcpSerSock.bind(ADDR)                       #绑定地址
    13 tcpSerSock.listen(5)                        #开始监听端口,参数5表示可以接收的连接数量
    14 
    15 while True:                                             #循环接受多个客户端发来的请求
    16     try:
    17         print('Watting for connection...')
    18         tcpCliSock, addr = tcpSerSock.accept()          #当有客户端发来请求时,通过accept()方法来接受,返回参数有两个,可以自行print出来,看看是什么
    19         print('...connected from :', addr)
    20 
    21         while True:                                     #循环接受客户端发来的消息
    22             data = tcpCliSock.recv(BUFIZE)              #接受客户端发来的消息,接收到的是一个byte类型的数据
    23             if not data:                                #当用户发送空字符串的是时候,跳出循环,重新接收数据
    24                 break
    25             print('接收到数据:', data)
    26             tcpCliSock.send(b'[%s] % s' % (ctime().encode(), data))     #将接收到的数据加上时间戳返回回去,同样返回的数据需要是byte类型
    27     except ConnectionResetError as e:                                   #当客户端关闭连接时,catch这个错误做出相应的提示
    28         print(e)
    29         print('%s:%s 退出了' % (addr[0], addr[1]))                      #服务端也关闭相关的socket连接
    30     finally:
    31         tcpCliSock.close()
    32 tcpSerSock.close()

    三、创建客户端

     1 __author__ = "JentZhang"
     2 
     3 from socket import *
     4 
     5 HOST = '127.0.0.1'
     6 PORT = 21136
     7 BUFSIZE = 1024
     8 ADDR = (HOST, PORT)
     9 
    10 tcpCliSock = socket()
    11 tcpCliSock.connect(ADDR)        #建立连接
    12 
    13 while True:
    14     msg = input('>>')           #输入要发送的内容
    15     if not msg:                 #如果发送内容为空,则重新发送
    16         break
    17     tcpCliSock.send(msg.encode())       #发送byte类型的数据
    18 
    19     data = tcpCliSock.recv(BUFSIZE)     #接受服务端的返回
    20     if not data:                        #如果服务端返回为空,则重新发送
    21         break
    22         
    23     print(data.decode())
    24 tcpCliSock.close()

    四、效果预览

      1.分别启动服务端和客户端,注意先启动服务端。

      2.发送数据

      3.断开连接

    五、总结概括

      简单的做了一个socket的实例(由于socket的阻塞模式,本实例同一时间只能一个客户端连到服务器,只有当当前连接的客户端断开了连接,其他客户端才能连进来)。

      关于socket编程,还有更丰富的东西在里面。本例仅供参考。

  • 相关阅读:
    Java并发编程:ThreadLocal
    线程的3种实现方式
    线程的生命周期
    并行与并发
    wordcount详解shuffle机制(转)
    linux vi编译卡死原因
    django2.0集成xadmin0.6报错集锦
    drf框架
    Django中 media资源配置
    Django-rest framework框架的安装配置和简介、Restful接口规范、基于原生django书写满足restful规范的接口
  • 原文地址:https://www.cnblogs.com/JentZhang/p/9372219.html
Copyright © 2020-2023  润新知