Чтение потока TCP с PHP (преобразование кода C #) - PullRequest
1 голос
/ 01 февраля 2012

У меня проблемы с получением / чтением любого ответа от TCP-сервера.Соединение устанавливается нормально, и я пишу на сервер. ОК, но может быть проблема с конкретным символом EOT, требуемым для этого сервера (0x04).

Также приведен пример кода, который мне был дан (см.ниже - в C #) преобразует строку в двоичный / байт, что из того, что я прочитал, PHP не требует при использовании fsockopen & fputs.

Мой код:

$host = "xxx.xxx.xxx.xxx";
$port = 23432;
$msg = "sample message". chr(4);
$fp = fsockopen ($host, $port, $errno, $errstr);
if (!$fp) {
    $lines = "Error: could not open socket connection";
} else {
    // write the user string to the socket 
    fputs ($fp, $msg);

    // get the result 
    $lines .= fgets($fp, 1024);

    // close the connection 
    fclose($fp);
} ?>
Server said: <b><?php echo $lines; ?>

Пример кода C #, который мне дали:

TcpClient tcp = new TcpClient(); 
tcp.Connect("xxx.xxx.xxx.xxx", 23432); 
Console.WriteLine(); 
Console.WriteLine("Connected to tcp server."); 

// Sent request to tcp server 
NetworkStream stream = tcp.GetStream(); 
// Ask for travel time data 
byte[] tx = GetBytes("sample message"); 
stream.Write(tx, 0, tx.Length); 

// Receive data from tcp server 
byte[] buffer = new byte[0xffff]; 
int bytesRead = stream.Read(buffer, 0, 0xffff); 
Console.WriteLine("Received " + bytesRead + " bytes from tcp server"); 
string s = Encoding.ASCII.GetString(buffer, 0, bytesRead); 
Console.WriteLine("Below is the data received."); 
Console.WriteLine(s); 

// Keep the connection open, the data is coming every 20 secs 

tcp.Close(); 



// This function will add the binary byte (0x04) to the end of the text 
static private byte[] GetBytes(string str) 
{ 
        byte[] bytes = new byte[str.Length + 1]; 
        Encoding.ASCII.GetBytes(str, 0, str.Length, bytes, 0); 
        bytes[str.Length] = 0x04; 

        return bytes; 
} 

Есть идеи?На данный момент код PHP находится там около 40 секунд после отправки сообщения и ничего не возвращает.

...