TCP发送和接收数据包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP发送和接收数据包相关的知识,希望对你有一定的参考价值。

我正在为机器人竞赛做准备。这是我的任务:

使用无线IEEE 802.11 b / g / n通信标准,通过TCP协议以单播形式将乘客接送点发送到机器人。机器人在192.168.1.100:9999连接到侦听服务器。

为了实现它,我正在尝试以下python代码:

import socket

TCP_IP = '192.168.1.100'
TCP_PORT = 9999
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
data = s.recv(BUFFER_SIZE)
s.close()

print "received data:", data

问题是,我不确定这个代码是否是正确的路径(接收数据包),我无法进行测试。

知道是否有任何TCP数据包发送器到特定的IP和端口真是太棒了。通过这种方式,我可以测试我是否接受。请考虑我的任务。

谢谢!

答案

简单的tcp接收器可能在python 3中看起来像这样:

import socket

def receiver_tcp(tcp_ip, tcp_port, echo=True, buffer_size=4096):

    with socket.socket(
            socket.AF_INET,  # Internet
            socket.SOCK_STREAM  # TCP
            ) as sock:
        sock.bind((tcp_ip, tcp_port))
        # listening forever
        while True:
            sock.listen()
            conn, addr = sock.accept()
            answer = ''
            # getting and decoding message
            while True:
                answer_part = conn.recv(buffer_size).decode('UTF-8')
                if not answer_part:
                    conn.close()
                    break
                answer += answer_part
            # logging to console
            if echo:
                print(answer)

简单的tcp发件人可能如下所示:

import socket

def sender_tcp(message, tcp_ip, tcp_port):

    with socket.socket(
            socket.AF_INET,  # Internet
            socket.SOCK_STREAM  # TCP
            ) as sock:
        sock.connect((tcp_ip, tcp_port))
        sock.send(message.encode('UTF-8'))

您可以在python中的不同线程中的同一台计算机上运行接收器和发送器,或使用两台计算机。

以上是关于TCP发送和接收数据包的主要内容,如果未能解决你的问题,请参考以下文章

试图理解我通过 TCP 连接发送/接收的 UART 数据包

TCP网络通讯如何解决分包粘包问题(有模拟代码)

centostcp不发送

tcp 连接上的 recv() 问题

TCP协议面试热点(面向字节流,粘包问题,TCP异常情况)

TCP连接时的三次握手,四次挥手