TCP отправлять и получать пакеты - PullRequest
0 голосов
/ 06 сентября 2018

Я готовлюсь к соревнованиям по робототехнике. Вот моя задача:

Точки посадки и высадки пассажиров передаются роботам в одноадресная форма по протоколу TCP с использованием беспроводной сети IEEE 802.11 b / г / н стандарт связи. Робот подключается к слушателю сервер на 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 и порт . Таким образом, я могу проверить, получаю ли я или нет. Предложите рассмотреть мою задачу, пожалуйста.

Спасибо!

1 Ответ

0 голосов
/ 06 сентября 2018

Простой приемник 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 или использовать два компьютера.

...