我想制作一个用 C++ 编写的服务器来支持我的游戏。我学习了套接字的基础知识,并编写了一个运行良好的基本聊天程序。现在我想创建一个像 Apache 一样的 HTTP 服务器,但仅限于 AJAX 请求响应部分。
我想一开始我复制了一个 Apache 响应文本,并使用 C++ 服务器程序发送了准确的响应。
问题是浏览器(Firefox)连接到 apache 并且一切正常,除了所有请求都得到正确的响应。
但是,如果我使用 C++ 客户端发送此消息,则 FireBug 会告诉我响应状态正常 (200),但没有实际的响应文本。 (这怎么可能?)
该响应文本与 apache 发送的内容完全相同。我稍微对比了一下,发现是一样的。
php 文件是原始响应
<?php echo "AS";echo rand(0,9); ?>
以及原始源代码:
- 套接字.hhttp://pastebin.com/bW9qxtrR
- 套接字.cpphttp://pastebin.com/S3c8RFM7
- 主程序http://pastebin.com/ckExuXsR
- 索引.htmlhttp://pastebin.com/mcfEEqPP
- ajax.js http://pastebin.com/uXJe9hVC
- 基准测试.jshttp://pastebin.com/djSYtKg9
不需要 jQuery。
main.cpp中有很多垃圾代码,例如main3和main4函数,这些不影响结果。
我知道 C++ 代码中的响应内容并不是很好,因为连接关闭不是最好的;我稍后会解决这个问题,现在我想先发送成功响应。
问题:
index.html 通过 apache 在端口 80 上提供服务。浏览器加载它并开始发送请求。
请求文件(程序)在另一个端口上,在8888端口上,该端口已经是一个不同的服务器它不允许ajax(不知道为什么)获取发布数据。该程序仍然可以与remote服务器但看不到响应。
一整天后,我用 fiddler 程序进行了很多测试,捕获了响应,该方法对我很有帮助。
我使用 fiddler 程序来捕获好的答案和坏的答案。他们是一样的。之后,我关闭了套接字应用程序,并强制 fiddler 自动响应,并且“坏”答案的答案仍然有效。所以在那之后我用好的代替了坏的,什么也没有发生。好的文本的错误答案在 :8888 端口上仍然很糟糕,但原始 :80 端口上的另一个很好,但它们绝对相同,并且是同一个程序发送的(fiddler),我认为如果响应有一些缺失不在同一服务器地址上(甚至不在同一端口)。
之后我想也许缺少头文件,或者类似的东西。
所以我将apache配置为监听80端口,加载到index.html中。之后我关闭了apache服务器并将端口更改为8888,然后运行ajax请求,我意识到它们是错误的,但它们是由apache发送的,并且所有先前的请求(在同一端口上)都很好。所以问题只出在 ajax 上:D
非常感谢托尼·李Fiddler建议。
其实没有解决办法,但是问题存在的原因是有答案的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)