美文网首页
python使用socket建立TCP/IP连接向服务端发送报文

python使用socket建立TCP/IP连接向服务端发送报文

作者: DD丿 | 来源:发表于2023-09-12 11:53 被阅读0次

客户端:

import re

import socket

class ll:

    def llOrder():

        '''ll客户端发送数据给server'''

        # 目标服务器的ip和端口号

        server_ip_port= ('服务器ip', 端口)

        # 客户端、创建client-socket    TCP协议

        # 创建客户端socket对象

        llclient_socket= socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        # 客户端发送建立连接的请求,服务器默认配置为自动接受连接

        llclient_socket.connect(server_ip_port)

        print("ll客户端启动,等待DL接受连接...")

        with open(r"D\:报文.txt") as file:

            lines= file.read()

            # 循环发送每行数据给服务器,rstrip去除右侧空格,lstrip左侧,strip全部

            # for line in lines:

            # Line = line.rstrip('\n')  # 去除换行符

            # 将文件指定的数据替换为16进制字符编码'\x05'bytes类型

            bdata= lines.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \

.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()

            print(bdata)

        # 向服务器发送数据

        llclient_socket.send(bdata)

        # 接收服务器返回的数据

        recv_data= llclient_socket.recv(1024)

        # 若服务器返回数据为b'\x06',则重新赋值为

        if recv_data== b'\x06':

            recv_data= ''

        # 将接收到的数据转为字符串

        # recv_str = str(recv_data, encoding='utf-8')

# b = chr(recv_data[0])

        print('客户端接收到的服务器的数据为:', recv_data)

        # todo 关闭socket

        llclient_socket.close()

l=ll.llOrder()


按照每行逐条发送:

import socket

class Lis:

    def LisOrder():

        '''Lis客户端发送数据给DL'''

        # 目标服务器的ip和端口号

        server_ip_port= ('ip', 8888)

        # 客户端、创建client-socket    TCP协议

        # 创建客户端socket对象

        Lisclient_socket= socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        # 客户端发送连接的请求(不是传输数据的请求,是创建连接的请求),服务器自动接受连接

        Lisclient_socket.connect(server_ip_port)

        print("Lis客户端启动,等待DL接受连接...")

        '''打开文件并转换每行<>内的字符类型'''

        with open(r"D:\丁家杰\报文.txt") as file:

            # 读取文件所有行

            lines= file.readlines()

            # 循环发送每行数据给服务器,rstrip去除右侧空格,lstrip左侧,strip全部

            line1= lines[0].strip('\n')  # 去除换行符

            # 将文件指定的数据替换为16进制字符编码'\x05'bytes类型

            bdata1= line1.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \

.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()

            line2= lines[1].strip('\n')  # 去除换行符

            # 将文件指定的数据替换为16进制字符编码'\x05'bytes类型

            bdata2= line2.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \

.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()

            line3= lines[2].strip('\n')  # 去除换行符

            # 将文件指定的数据替换为16进制字符编码'\x05'bytes类型

            bdata3= line3.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \

.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()

            line4= lines[3].strip('\n')  # 去除换行符

            # 将文件指定的数据替换为16进制字符编码'\x05'bytes类型

            bdata4= line4.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \

.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()

            line5= lines[4].strip('\n')  # 去除换行符

            # 将文件指定的数据替换为16进制字符编码'\x05'bytes类型

            bdata5= line5.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \

.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()

            # 向服务器发送第一次数据

            Lisclient_socket.send(bdata1)

            # 接收服务器第一次返回的数据

            recv_data1= Lisclient_socket.recv(1024)

            print('客户端接收到的第一次服务器的响应为:', recv_data1)

            if recv_data1== b'\x06':

                # 接收到ACK后发送第二次请求

                Lisclient_socket.send(bdata2)

                recv_data2= Lisclient_socket.recv(1024)

                print('客户端接收到的第二次服务器的响应为:', recv_data2)

            # 若服务器返回数据为b'\x06'

            if recv_data2== b'\x06':

                # 向服务器发送第三次数据

                Lisclient_socket.send(bdata3)

                # 接收服务器第三次返回的数据

                recv_data3= Lisclient_socket.recv(1024)

                print('客户端接收到的第三次服务器的响应为:', recv_data3)

            # 若服务器返回数据为b'\x06'

            if recv_data3== b'\x06':

                # 向服务器发送第三次数据

                Lisclient_socket.send(bdata4)

                # 接收服务器第三次返回的数据

                recv_data4= Lisclient_socket.recv(1024)

                print('客户端接收到的第四次服务器的响应为:', recv_data4)

            if recv_data4== b'\x06':

                # 向服务器发送第五次数据

                Lisclient_socket.send(bdata5)

                # 接收服务器第五次返回的数据

                recv_data5= Lisclient_socket.recv(1024)

                print('客户端接收到的第五次服务器的响应为:', recv_data5)

            if recv_data5== b'\x06':

                recv_data5= ''

                print(recv_data5)

        # todo 关闭socket

        Lisclient_socket.close()

l= Lis.LisOrder()

相关文章

  • 网络篇

    TCP建立连接的过程? TCP建立连接需要3次握手1,客户端发送带有SYN标志的TCP报文到服务端2,服务端回复带...

  • Java:如何发送UDP数据报

    发送数据报文的时候和TCP Socket一样,需要指定ip地址和端口,不一样的是,UDP不需要建立连接,因此在发送...

  • TCP连接和断开过程

    1. TCP连接过程 第一次握手 客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送...

  • 技能树-网络-TCP

    必备知识: SYN :请求报文 是TCP/IP建立连接时使用的握手信号ACK :确认字符FIN :释放报文seq:...

  • 浏览器输入url后全过程

    过程 dns解析获取ip地址 依据ip地址,建立tcp连接 客户端发送http请求报文 服务器架构处理请求 服务器...

  • iOS知识总结

    一、建立TCP连接/ TCP三次握手====== Socket是基于TCP/IP上的封装, 如果要了解Socket...

  • 简单描述HTTP连接建立流程

    连接建立流程步骤如下: 第1步:TCP通过三次握手建立双方连接;第2步:客户端通过发送请求报文及请求数据给服务端;...

  • 08-Java基础-Socket & 反射

    Socket、反射 Socket UDP TCP1.客户端1)创建Socket连接服务端(指定ip地址,端口号)通...

  • Python-socket模拟TCP通讯

    Python socket模拟TCP通讯 本文将介绍使用Python的socket模块创建TCP客户端和服务端的方...

  • python实现tcp协议的服务端与客户端

    服务端(server) python使用socket实现tcp协议的服务端,有以下几个步骤 创建socket 绑定...

网友评论

      本文标题:python使用socket建立TCP/IP连接向服务端发送报文

      本文链接:https://www.haomeiwen.com/subject/hyoyvdtx.html