In diesem Artikel werden hauptsächlich relevante Informationen zur Verwendung von Socket zum Erstellen eines kleinen Webservers vorgestellt. Freunde, die ihn benötigen, können einen Blick darauf werfen . Bar. Um den Webserver zu implementieren, können die abgerufenen Daten über den folgenden Code-Browserzugriff abgerufen werden.
Aber das Obige ist nur ein Prinzip. In der Praxis wird es jedoch sehr kompliziert sein. Selbst wenn wir einen einfachen Webserver erstellen möchten, müssen wir noch zwei Probleme lösen: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);
Solange es ein bestimmtes Format hat, wird es vom Browser als HTTP-Header behandelt. Das Format des HTTP-Headers ist:
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);
Bisher wissen wir nicht, wie die im Browser eingegebene URL lautet. Der HTTP-Header der Anfrage hat ebenfalls ein bestimmtes Format. Wir müssen ihn nur herausholen und zerlegen, um die URL zu erhalten.
Die Demontage ist nicht schwierig. Lassen Sie uns darüber sprechen, wie Sie sie erhalten. Sind die vorherigen Daten und Längen nicht immer nutzlos? Wie folgt:
string requestText = Encoding.UTF8.GetString(data, 0, length);
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) { using (Socket socket = socketListen.Accept()) { byte[] data = new byte[1024 * 1024 * 4]; // 浏览器发来的数据 int length = socket.Receive(data, 0, data.Length, SocketFlags.None); if (length > 0) { string requestText = Encoding.UTF8.GetString(data, 0, length); byte[] body = Encoding.UTF8.GetBytes(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); } socket.Shutdown(SocketShutdown.Both); socket.Close(); } } }); thread.IsBackground = true; thread.Start(socketWatch);
Das obige ist der detaillierte Inhalt vonC# verwendet Socket, um eine kleine Webserver-Codefreigabe zu erstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!