当前位置:   article > 正文

python 网络编程示例 TCP客户端、服务端搭建_python tcp client

python tcp client

使用python实现TCP数据上报功能,需要具体由客户端、服务端构成。代码非常简单。如下所示。
1、客户端Python代码示例

from socket import *

# 1. 创建socket
tcp_client_socket = socket(AF_INET, SOCK_STREAM)

# 2. 链接服务器
tcp_client_socket.connect(("127.0.0.1", 26788))

# 提示用户输入数据
send_data = 'data'

# 3. 向服务器发送数据
tcp_client_socket.send(send_data.encode("utf-8"))

# 4.接收服务器发送的消息,最多接收1024字节
msg = tcp_client_socket .recv(1024)
print(msg.decode())

# 5. 关闭套接字
tcp_client_socket.close()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

2、以下代码便可运行最简单的TCP服务端

import socket


# 1. 创建TCP套接字
server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2. 绑定本地信息
server_s.bind(("", 26788))

# 3. 设置为被动的
server_s.listen(128)

# 4. 等待客户端链接
new_s, client_info = server_s.accept()

# 5. 用新的套接字为已经连接好的客户端服务器
recv_content = new_s.recv(1024)
print("%s>>>%s" % (str(client_info), recv_content.decode("gbk")))

#6.服务端回复消息给客户端
new_s.send(b'OK')

# 6. 关闭套接字
new_s.close()
server_s.close()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

3、持续接收客户端上报数据
在实际工程中,我们的服务端程序会一直监听TCP上报的数据,比如在物联网场景,因此,我们需要将TCP程序进行修改。可以参考以下样例:

import socket


# 1. 创建TCP套接字
server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2. 绑定本地信息
server_s.bind(("", 26788))

# 3. 设置为被动的
server_s.listen(128)

print('开始监听26788端口接收上报的信息\n')

# 4. 等待客户端链接
new_s, client_info = server_s.accept()

while True:
    # 5. 用新的套接字为已经连接好的客户端服务器
    recv_content = new_s.recv(1024)
    print("%s>>>%s" % (str(client_info), recv_content.decode("gbk")))

    #6.服务端回复消息给客户端
    new_s.send(b'OK')

    if not recv_content:
        # 6. 关闭服务套接字
        # 当客户端调用了close后,recv_content返回值为空时,close()
        new_s.close()

server_s.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

4、TCP服务端实现高并发的最优模式

为了实现高并发,我们可以将一些构成封装为类,这样来实现多并发调用,具体代码如下所示:

import socket
import time
from rzb.RZBstr2sqlite import str_2_db
from rzb.SN import SN_JiaoYan
import select
import LOT_TCP_data_Process
import threading


class HandleData(threading.Thread):
    def __init__(self, client_socket,client_info):
        super().__init__()
        self.client_socket = client_socket
        self.client_info = client_info

    def run(self):
        # 接收/发送数据
        while True:
            recv_content = self.client_socket.recv(1024)
            start_time = time.time()
            if len(recv_content) != 0:
                print(recv_content)
                self.client_socket.send(recv_content)
                msg = LOT_TCP_data_Process.tcp_data_processing(self.client_info, recv_content)
                return_msg = str(self.client_socket) + '\n' + msg
                self.client_socket.send(return_msg.encode('utf-8'))
                print(self.client_socket, 'finish\n')
                end_time = time.time()
                duration_time = end_time - start_time
                print("程序运行时间为:", duration_time, "秒")
            else:
                self.client_socket.close()
                break

    def __del__(self):
        self.client_socket.close()



class TCPServer(threading.Thread):
    def __init__(self, port):
        # 调用父类的初始化方法
        # threading.Thread.__init__(self)
        super().__init__()
        # 创建套接字
        self.server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 绑定本地信息
        self.server_s.bind(("", port))
        # 将套接字由默认的主动链接模式改为被动模式(监听模块)
        self.server_s.listen(128)
        print('开始监听26788端口接收网关上报的状态信息\n')

    def run(self):
        # 等待客户端进行链接
        while True:
            new_s, client_info = self.server_s.accept()
            print(client_info)
            # t = HandleData(new_s)
            # t.start()
            HandleData(new_s,client_info).start()

    def __del__(self):
        # 关闭套接字
        self.server_s.close()


def main():
    socket_recv_port = 26788
    tcp_server = TCPServer(socket_recv_port)
    tcp_server.start()

if __name__ == '__main__':
    main()


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/1013291
推荐阅读
相关标签
  

闽ICP备14008679号