Прием TCP пакета на PHP

405
10 сентября 2017, 02:15

Отправляю TCP пакет из программы на C#

        string IP = "127.0.0.1";
        string Port = "8000";        
        // инициализация сокета
        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        // создание параметра для подключения к серверу
        IPAddress ip = IPAddress.Parse(IP);
        IPEndPoint ipe = new IPEndPoint(ip, int.Parse(Port));
        EndPoint end = (EndPoint)ipe;
        try
        {
            socket.Connect(ipe);
        }
        catch(SocketException ex) // на случай каких-либо проблем
        {
            MessageBox.Show("Проблемы с установкой соединения.\nПриложение будет закрыто."+ ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            Application.Exit();
        }
        string str = "привет андрей hello andry 1245";
        byte[] buffer = Encoding.Default.GetBytes(str);
        socket.Send(buffer, buffer.Length, 0);

Как мне получить сообщение "привет андрей hello andry 1245" на php ?

Answer 1

Я плохо знаю C#, но я знаю PHP. Сначала создать на PHP сокет.

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) { 
echo "Ошибка создания сокета"; 
}

Дальше привять Ip, и port, ибо я так понял ваш код, это клиент.

if (($ret = socket_bind($sock, $address, $port)) < 0) {//в $addres помести адрес, которому делаешь запрос с C#, и в порт засунь тот же порт что в C#. 
echo "Ошибка связи сокета с адресом и портом"; 
}

Потом слушаем сокет, получаем сообщения

//Начинаем прослушивание сокета (максимум 5 одновременных соединений) 
  if (($ret = socket_listen($sock, 5)) < 0) { 
    echo "Ошибка при попытке прослушивания сокета"; 
  } 
  else { 
    echo "Ждём подключение клиента\n"; 
  } 
  do { 
    //Принимаем соединение с сокетом 
    if (($msgsock = socket_accept($sock)) < 0) { 
      echo "Ошибка при старте соединений с сокетом"; 
    } else { 
      echo "Сокет готов к приёму сообщений\n"; 
    } 
    //Бесконечный цикл ожидания клиентов 
    do { 
      echo 'Сообщение от клиента: '; 
      if (false === ($buf = socket_read($msgsock, 1024))) { 
        echo "Ошибка при чтении сообщения от клиента";       } 
      else { 
        echo $buf."\n"; //Сообщение от клиента 
      } 
    } while (true); 
  } while (true);

Подробнее про сокеты, почитайте тут - http://php.net/manual/ru/book.sockets.php, так же вот клиент серверная архитектура, вам просто надо повторить клиент на C#, сервер будет работать независимо от клиента. Клиент - https://myrusakov.ru/php-socket-client.html, сервер https://myrusakov.ru/php-socket-server.html

UPD: выполнить этот скрипт, можно через CLI. Чтобы выполнить скрипт через CLI(командую строку), вам надо установить PHP с оф сайта, распаковать его в папку. И сообственно создать файл с <<кодом>>. После чего в командой строк, вы вводите — путь к папке с php от самого диска\php.exe путь_к_файлу_с_кодом\index.php

Это самый просто способ запуска скрипта по CLI.

READ ALSO
Не работает wp_enqueue_style()

Не работает wp_enqueue_style()

wp_enqueue_style(); не работаетне могу понять в чем проблема

399
Не выводит результат, php7

Не выводит результат, php7

В чем проблема, уже сижу полчаса и не могу понять в чем я допустил ошибку

241
При попытке откомпелировать VS 2017 выдает: не удается открыть источник файл &ldquo;stdio.h&rdquo;

При попытке откомпелировать VS 2017 выдает: не удается открыть источник файл “stdio.h”

Серьезность Код Описание Проект Файл Строка Состояние подавления Ошибка (активно) E1696 не удается открыть источник файл "stdioh" ConsoleApplication1...

1809
Visual Studio 2017 Libcurl unresolved external symbol __imp_ префикс

Visual Studio 2017 Libcurl unresolved external symbol __imp_ префикс

Здравствуйте решил написать не большой код на libcurl, но вот в чем причина мне вожна работоспособность данной программы на любых компьютерах...

412