创建TCP套接字连接并通过XML请求发送以获得XML响应?

创建TCP套接字连接并通过XML请求发送以获得XML响应?

问题描述:

端口为5792,ip为123.123.123.123。我能够将数据发送到IP,像这样:创建TCP套接字连接并通过XML请求发送以获得XML响应?

$host = "tcp://123.123.123.123"; 
$port = 5792; 
$errstr = ''; 
$errno = ''; 

$fp = fsockopen($host, $port ,$errno, $errstr, 30); 
if (!$fp) { 
    print 'COULD NOT CONNECT! <br />'; 
    echo "$errstr ($errno)<br />\n"; 
    die(); 
} 
else { 
    print 'SUCCESS!<br />' 
} 

发送似乎也工作:

$message = 'hello'; 
fputs ($fp, $message); 

,问题就来接收数据时:

print fread($fp, 128); 

这打印:

hello 

...到屏幕!换句话说,它回应了我发送的内容。现在,我知道所有的消息都封装在一个XML元素中。在这个元素内可以放置一个服务请求,它也被封装在一个XML元素中。

被封装的XML元素被称为“根”,在这个我可以放置服务请求请求。让我们调用我正在尝试完成的实际服务请求“topUp”。

  1. 假设有一个名为ROOT的root xml元素,它封装了服务请求“topUp”,那么将这个XML作为字符串提交的标准方式是什么?
  2. 当服务器无法理解您所说的内容时,希望回应您的请求是否正常?
+1

只有当您告诉您连接的服务器类型时,才能回答这两个问题。如果它是一个HTTP服务器,你可能想看看'cURL'。如果这是自定义的东西,你告诉我们。 – CodeCaster 2012-08-02 08:37:27

+0

这是自定义的,所以我可以安全地假设唯一能告诉我的人是真正的设计师吗? – coderama 2012-08-02 08:46:36

+0

我改变了我的问题一点... – coderama 2012-08-02 08:50:50

重要的是你知道请求命令的XML结构。在任何情况下,你可以给你以这样的方式太

$message = "<root>"."\n"; 
$message .= "<request>topUp</request>"."\n"; 
$message .= "</root>"."\n"; 
fputs ($fp, $message); 

命令,但除非你把你的请求结构定义你可能无法得到你想要的结果。