C#은 소켓을 사용하여 작은 웹 서버 코드 공유를 만듭니다.

黄舟
풀어 주다: 2017-03-21 11:40:11
원래의
1889명이 탐색했습니다.

이 글에서는 소켓을 사용하여 작은 웹 서버를 만드는 관련 정보를 주로 소개하고 있으니 필요한 친구들은 참고해 보도록 하겠습니다. . 술집. 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);
로그인 후 복사
특정 형식만 있으면 브라우저에서는 HTTP 헤더로 처리됩니다. HTTP 헤더의 형식은 다음과 같습니다.

    첫 번째 줄: HTTP/1.x + 공백 + 상태 코드 + 공백 + 설명
  • 중간 line : 이름 + 콜론 + 공백(생략 가능) + 값
  • 마지막 줄: 빈 줄

  • 형식은 반드시 그렇지 않으면 브라우저의 HTTP 헤더 및 HTTP 본문 인식에 영향을 미칩니다.

2. HTTP 헤더 요청

지금까지는 브라우저에 입력된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿