我有一个简单的程序,服务器或客户端不确定它是哪一端。我打开一个端口并接受它上面的消息。这工作但昨晚我通过GET而不是POST恢复了一条消息时崩溃了。你可能已经注意到我对网络很陌生。
我收到传输正常(套接字的东西),但我无法阅读该消息。
这是我目前使用的代码。
//read HTTp header until the message size comes in
for(int eight = 0; eight < 8; eight++)
{
message = in.readLine();
LOGGER.fatal(eight);
LOGGER.fatal(message);
if(message.contains("Content-Length"))
{
try {
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(message);
while (matcher.find()) {
sizeInt = Integer.parseInt(matcher.group());
}
}
catch (Exception e)
{
LOGGER.fatal("size not found on header line", e);
//System.exit(-1);
}
}
}
LOGGER.fatal(sizeInt);
LOGGER.fatal("---------------------------");
char[] buffer =new char[sizeInt];
//skip blank line between header and message
message = in.readLine();
//read message
int fullRead = 0;
int thisRead = 0;
do
{
thisRead = in.read(buffer, fullRead, sizeInt - fullRead);
LOGGER.info(fullRead + " of " + sizeInt + " bytes of message read");
fullRead += thisRead;
}while(fullRead != sizeInt);
我遇到的问题是GET方法没有看到以字节为单位的消息大小,没有它我不知道如何在没有它的情况下读取消息。
我正在使用java。
任何人都可以建议我如何编辑此代码以理解GET消息。
答案 0 :(得分:1)
GET请求没有任何内容 - 没有什么可读的。任何数据都必须位于标题/网址中。
答案 1 :(得分:1)
看起来你想要实现一个HTTP服务器(它不是客户端,因为你想要读取HTTP请求,而不是制作它们)。如果你是“非常新的网络”,我不会推荐它。无论如何,如果你真的想要构建自己的HTTP服务器,那么Web上有一些例子,例如this one。另一种方法是,如果您的应用程序中需要HTTP服务器,则使用com.sun.net.httpserver.HttpServer
(该链接包含一个最小示例)。
答案 2 :(得分:0)
HTTP GET没有任何内容,因此没有内容长度。此外,HTTP POST不一定需要在HTTP / 1.1中指定Content-Length:HTTP Message Length