【发布时间】:2021-08-23 06:58:47
【问题描述】:
所以, 我们有一个关于网络编程的实验室。我们现在不会太深入,因为这只是一个介绍,但它仍然非常棘手。
无论如何... 我使用 localhost (127.0.0.1) 作为客户端,而服务器是我们真正需要编写的代码,作为控制台应用程序。
在应用程序的目录中有 2 个网页(index.html 和 secondpage.html) - 用于测试目的。
作业的第 2 部分说:
服务器检查每个 GET 请求的网站是否存在于“数据系统”中,如果存在,则发送以下内容:
- 确认码 (200)
- 网页的字符数
- 和 bla bla bla
(基本上用FileStream等...)
我的问题基本上是关于这个“检查”(粗体)。一旦我得到这个检查/条件语句,我就可以管理其余的。
到目前为止,这就是我所拥有的(相关部分的sn-p):
private static void ClientHandler(object o)
{
TcpClient client = o as TcpClient;
NetworkStream stream = client.GetStream();
int i;
Byte[] bytes = new Byte[256];
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
string webPage = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine(webPage);
}
}
PS1:ClientHandler 是客户端连接时(作为新线程)执行的方法
PS2:那个 Console.WriteLine 是一个检查,看看我到底得到了什么。
使用 MS Edge 输出 http://127.0.0.1/index.html):
GET /index.html HTTP/1.1
主机:127.0.0.1
连接:保持活动
缓存控制:max-age=0
sec-ch-ua: "Not;A Brand";v="99", "Microsoft Edge";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
DNT:1 升级不安全请求:1
用户代理:Mozilla/5.0( 视窗 NT 10.0; WIN64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.37
接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange; v=b3;q=0.9
Sec-Fetch-Site:无
Sec-Fetch-Mode:导航
Sec-Fetch-User: ?1
Sec-Fetch-Dest:文档
接受编码:gzip、deflate、br
接受语言:en-GB,en;q=0.9,de;q=0.8,de-DE;q=0.7,en-US;q=0.6
我在想,如果我可以,例如,创建一个字符串列表,将我拥有的所有页面的名称,如“数据库”,获取引用我在 127.0 之后编写的 GET 行的部分.0.1,在本例中为 index.html,然后检查列表是否包含它。
但是我什至没有得到每行的这个 o/p,而是我得到第一行的第一个字符,然后是第二个字符,直到我得到最后一行的第一个字符,然后它返回,开始获取第一行的第二个字符,第二个字符,直到它得到所有字符 - 你知道,以垂直方式,而不是水平方式。诡异的。 我希望你们知道我的意思。
那么,这是什么检查,我该怎么做呢?
谢谢。
【问题讨论】:
标签: c# http server network-programming client