У меня проблемы с получением / чтением любого ответа от 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 секунд после отправки сообщения и ничего не возвращает.