이 글에서는 소켓을 사용하여 작은 웹 서버를 만드는 관련 정보를 주로 소개하고 있으니 필요한 친구들은 참고해 보도록 하겠습니다. . 술집. Web Server를 구현하기 위해서는 다음과 같은 코드 브라우저 접속을 통해 접근한 데이터를 얻을 수 있습니다.
rree그러나 위의 내용은 단지 원칙일 뿐이고 실제로는 매우 복잡할 것입니다. 그러나 간단한 웹 서버를 만들고자 하더라도 다음 두 가지 문제를 해결해야 합니다.
1. HTTP 헤더 출력
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socketWatch.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 81));
socketWatch.Listen(20); // 参数表示最多可容纳的等待接受的传入连接数,不包含已经建立连接的。
Thread thread = new Thread(delegate(object obj)
{
Socket socketListen = (Socket)obj;
while (true)
{
Socket socket = socketListen.Accept();
byte[] data = new byte[1024 * 1024 * 4]; // 浏览器发来的数据,限定为 4K。
int length = socket.Receive(data, 0, data.Length, SocketFlags.None);
socket.Send(Encoding.UTF8.GetBytes("欢迎访问 www.cftea.com\r\n" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")));
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
});
thread.IsBackground = true;
thread.Start(socketWatch);
지금까지는 브라우저에 입력된 URL이 무엇인지 알 수 없습니다. 요청의 HTTP 헤더에도 특정 형식이 있습니다. URL을 얻으려면 이를 꺼내서 분해하기만 하면 됩니다.
분해도 어렵지 않은데, 얻는 방법에 대해 알아보겠습니다. 이전 데이터와 길이는 항상 쓸모가 없지 않나요? 다음과 같습니다:
byte[] body = Encoding.UTF8.GetBytes("欢迎访问 www.cftea.com\r\n" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); byte[] head = Encoding.UTF8.GetBytes(@"HTTP/1.1 200 OK Content-Length: " + body.Length + @" Content-Type: text/plain Date: " + string.Format("{0:R}", DateTime.Now) + @" Server: Cftea Web Server "); socket.Send(head); socket.Send(body);
string requestText = Encoding.UTF8.GetString(data, 0, length);
위 내용은 C#은 소켓을 사용하여 작은 웹 서버 코드 공유를 만듭니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!