使用 HTTP GET 请求通过 TCP 向 Ubuntu 服务器发送数据

使用 HTTP GET 请求通过 TCP 向 Ubuntu 服务器发送数据

我正在使用工业调制解调器(Erco 和 Gener)将数据发送到托管在 Ubuntu 服务器上的 php 网页。在 Ubuntu 服务器端,我的网页通过以下格式的 URL 正确响应 http 请求:

http://xxx.xxx.xxx.xxx:80/testercogener.php?id=i&time=t

当我检查 ubuntu 服务器上的数据库时,在 mysql 数据库工具中一切看起来正常,我得到了新的行。

在调制解调器上,我使用 GPRS 网络上的 TCP 协议连接到服务器。

我发送的数据格式如下:

"GET /testercogener.php?id=%i&t=%t HTTP/1.1\\r\\nHost:xx.xxx.xxx.xxx\\r\\nConnection:close\\r\\n\\r\\n","H"

遵循 Erco & Gener 对语法的建议(双写\\\。主机和端口也使用调制解调器中的另一个函数输入。

这是在 Erco 和 Gener 调制解调器的串行接口上​​接收到的日志:

00:12:29  open socket OK (5)
00:12:29  Gprs_Call_State : GPRS_CALL_TCP_CONNECTION_START
00:12:30  Gprs_Call_State : GPRS_CALL_TCP_CONNECTION_IN_PROGRESS
00:12:30  RECV_STATE_INIT from RECV_STATE_CLOSE
00:12:30  RECV_STATE_RECV from RECV_STATE_INIT
00:12:54  close connection
00:12:54  Gprs_Call_State : GPRS_CALL_TCP_DISCONNECT_START
00:12:54  b_close_session:0  b_reopen_socket:1  state_send:0 NO_ERR_SEND  state_recv:6 Operation now in progress (310)
00:12:54  Gprs_Call_State : GPRS_CALL_TCP_DISCONNECT_CLOSE_SESSION

这是我的问题:由于它看起来被正确发送(NO_ERR_SEND),ubuntu 服务器上有没有方法或工具来检查 ubuntu 服务器端的套接字是否正确打开以及在其端收到了什么?

在 Windows 上的 XAMPP 上,我有一个完美的 Netstat 工具来检查所有打开和关闭的套接字,以及每个 GET 或 POST 的额外漂亮的日志文件,但在 ubuntu 上我没有这样的东西。

我认为这不是访问控制的问题,因为我可以从任何机器上的任何 Web 浏览器使用 url 执行正确的操作。

答案1

查看 中的访问日志/var/log/apache2/access.log。访问日志不仅列出了 IP 地址、时间戳和实际请求,还列出了用户代理。如果 IP 地址不足以缩小范围,这可能会指示请求来自何处。此外,408 错误意味着客户端已启动与服务器的连接,但实际上并未在合理的时间内发送请求。很难判断超时连接来自何处。如果 没有error.log给出更多提示,您可以tcpdump在服务器上运行 以查看服务器和客户端之间还有哪些其他流量在运行。无论如何,服务器不会拒绝连接。TCP 系统允许“三次握手“网络服务器会收到通知,但之后什么也没有发生。

客户端应使用空行关闭请求。这向服务器发出信号,表示请求已完成,服务器可以开始响应。标Connection: close头向服务器发出信号,表示它可以关闭连接(在 TCP 级别)。否则连接将超时。Connection 标头是可选的。

相关内容