精华内容
下载资源
问答
  • 利用socket编程实现简单的web服务器

    千次阅读 2020-04-08 22:27:15
    利用socket编程实现简单的web服务器 本博文主要利用socket 编程,实现简单的web服务器,客户端能正常访问这个服务器 目录结构 服务端实现 webserver.py import socket import os class WebServer: def __init__...

    本博文主要利用socket 编程,实现简单的web服务器,客户端能正常访问这个服务器

    目录结构

    在这里插入图片描述

    服务端实现

    webserver.py

    import socket
    import os
    
    class WebServer:
        def __init__(self):
            tcp_socker = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            tcp_socker.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
            tcp_socker.bind(("", 8080))
            tcp_socker.listen(10)
            self.tcp_socker = tcp_socker
            self.root_path = os.path.realpath(os.path.dirname(__file__)) + "/static"
    
        def start(self):
            while True:
                new_client_socket, ip_port = self.tcp_socker.accept()
                self._request_handler(new_client_socket, ip_port)
    
        def _request_handler(self, new_client_socket,ip_port):
            """接收信息,返回响应"""
            file_path = self._parse_request(new_client_socket, ip_port)
            if file_path == "/":
                file_path = "/index.html"
            response_data = self._response_request(file_path)
            new_client_socket.send(response_data)
            new_client_socket.close()
    
        def _parse_request(self, new_client_socket, ip_port):
            request_data = new_client_socket.recv(1024)
            if not request_data:
                print("%s客户端已下线。。。" % str(ip_port))
                new_client_socket.close()
                return
            request_text = request_data.decode()
            loc = request_text.find("\r\n")
            file_path = request_text[:loc].split()[1]
            print("[%s]正在请求 %s ..." % (str(ip_port), file_path))
            return file_path
    
        def _response_request(self, file_path):
            try:
                resource_path = self.root_path + file_path
                with open(resource_path, "rb") as file:
                    response_body = file.read()
                # 响应客户端
                response_line = "HTTP/1.1 200 OK\r\n"
                response_header = "Serverbbb:Python/2.1\r\n"
                response_blank = "\r\n"
            except Exception as e:
                resource_path = self.root_path + "/404.html"
                with open(resource_path, "rb") as file:
                    response_body = file.read()
                response_line = "HTTP/1.1 404 Not Found\r\n"
                response_header = "404 Error!\r\n"
                response_blank = "\r\n"
            response_data = (response_line + response_header + response_blank).encode() + response_body
            return response_data
    
    def main():
        webserver = WebServer()
        webserver.start()
    
    if __name__ == '__main__':
        main()
    

    客户端访问

    在浏览器访问localhost:8080,跳到index.html页面
    在这里插入图片描述
    访问localhost:8080/index.html
    在这里插入图片描述

    访问不存在的页面,返回404 Not Found
    在这里插入图片描述

    展开全文
  • 在这个编程作业中,你将用Python语言开发一个简单的Web服务器,它仅能处理一个请求。具体而言,你的Web服务器将:(1)当一个客户(浏览器)联系时创建一个连接套接字;(2)从这个连接接收HTTP请求;(3)解释该...

    计网课后编程作业

    Web Server

    在这个编程作业中,你将用Python语言开发一个简单的Web服务器,它仅能处理一个请求。具体而言,你的Web服务器将:(1)当一个客户(浏览器)联系时创建一个连接套接字;(2)从这个连接接收HTTP请求;(3)解释该请求以确定所请求的特定文件;(4)从服务器的文件系统获得请求的文件;(5)创建一个由请求的文件组成的HTTP响应报文,报文前面有首部行;(6)经TCP连接向请求的浏览器发送响应。如果浏览器请求一个在该服务器中不存在的文件,服务器应当返回一个“404 Not Found”差错报文。

    在配套网站中,我们提供了用于该服务器的框架代码。你的任务是完善该代码,运行你的服务器,通过在不同主机上运行的浏览器发送请求来测试该服务器。如果运行你服务器的主机上已经有一个Web服务器在运行,你应当为该Web服务器使用一个不同于80端口的其他端口。
     

    my first blog

    这是我第一次尝试在CSDN上写一篇博客,我的主要目的就是记录一下我之前所学的内容以及对应的作业。事实上,主要是因为课程作业的代码在本地储存的多而杂,比较乱,之后想再翻出来看也找不到,所以放到这上面方便管理,也为了节省一下本地空间 😃 (虽然这些代码实际上并无多少占用😥)本地没有那么多文件夹看起来会舒服些。
     
    原谅我只是代码的搬运工😭代码参考了同学的😨不过这些代码都是经过我亲自运行哒😆~~绝对没有问题,可以直接成功运行哒😎
    如果没有问题就麻烦给个赞哦~
     
    下面赶紧源码奉上:
     
     

    源码
    # Import socket module
    from socket import *
    import sys  # In order to terminate the program
    
    # Create a TCP server socket
    # (AF_INET is used for IPv4 protocols)
    # (SOCK_STREAM is used for TCP)
    
    serverSocket = socket(AF_INET, SOCK_STREAM)
    
    # Assign a port number
    serverPort = 6789
    # Bind the socket to server address and server port
    serverSocket.bind(("", serverPort))
    # Listen to at most 1 connection at a time
    serverSocket.listen(1)
    # Server should be up and running and listening to the incoming connections
    while True:
        print('The server is ready to receive')
    
        # Set up a new connection from the client
        connectionSocket, addr = serverSocket.accept()
    
        # If an exception occurs during the execution of try clause
        # the rest of the clause is skipped
        # If the exception type matches the word after except
        # the except clause is executed
        try:
            # Receives the request message from the client
            message = connectionSocket.recv(1024).decode()
            # Extract the path of the requested object from the message
            # The path is the second part of HTTP header, identified by [1]
            filename = message.split()[1]
            # Because the extracted path of the HTTP request includes
            # a character '\', we read the path from the second character
            f = open(filename[1:])
            # Store the entire contenet of the requested file in a temporary buffer
            outputdata = f.read()
            # Send the HTTP response header line to the connection socket
            connectionSocket.send("HTTP/1.1 200 OK\r\n\r\n".encode())
    
            # Send the content of the requested file to the connection socket
            for i in range(0, len(outputdata)):
                connectionSocket.send(outputdata[i].encode())
            connectionSocket.send("\r\n".encode())
    
            # Close the client connection socket
            connectionSocket.close()
    
        except IOError:
            # Send HTTP response message for file not found
            connectionSocket.send("HTTP/1.1 404 Not Found\r\n\r\n".encode())
            connectionSocket.send("<html><head></head><body><h1>404 Not Found</h1></body></html>\r\n".encode())
            # Close the client connection socket
            connectionSocket.close()
    
    serverSocket.close()
    sys.exit()  # Terminate the program after sending the corresponding data
    
    
    展开全文
  • Java Socket编程实现的简单多线程WEB服务器
  • 相信很多人在socket编程学习过程中,都会遇到类似的web服务器的设计案例,可是对于刚接触socket的新手来说,往往难以迈出第一步,于是在此分享一个多线程的web服务器代码(参考计算机网络课程的代码框架),便于各位...

    相信很多人在socket编程学习过程中,都会遇到类似的web服务器的设计案例,可是对于刚接触socket的新手来说,往往难以迈出第一步,于是在此分享一个多线程的web服务器代码(参考计算机网络课程的代码框架),便于各位网友参考学习使用!

     

    一、理解多线程

    多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。

    线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。

    多个线程的执行是并发的,也就是在逻辑上同时,而不管是否是物理上的同时。如果系统只有一个单核CPU,那么真正的同时是不可能的。不过,由于CPU的处理速度非常快,用户感觉好像自己的程序连续运行一样。

    多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的

    二、案例需求

    以JDK为开发工具,利用Socket通信机制实现一个多线程的WEB服务器,该服务器具有以下功能:

    1. 能够并行服务于多个请求。
    2. 对于每个请求,显示接收到的HTTP请求报文的内容,并产生适当的响应(若找到用户请求对象,则返回该对象。否则发送一个包含适当提示信息的响应消息,从而可以在浏览器窗口中显示差错信息。

    三、代码部分

    
    
    import java.io.*;
    import java.net.*;
    import java.util.*;
    
    public final class WebServer {
    	public static void main(String argv[]) throws Exception {
    		int port = 6666;//定义端口号
    		ServerSocket welcomeSocket = new ServerSocket(port);
    		while (true) {
    			Socket connectionSocket = welcomeSocket.accept();
    			HttpRequest request = new HttpRequest(connectionSocket);
    			Thread thread = new Thread(request);
    			thread.start();
    		}
    	}
    }
    
    final class HttpRequest implements Runnable {
    	final static String CRLF = "\r\n";
    	Socket socket;
    
    	public HttpRequest(Socket socket) throws Exception {
    		this.socket = socket;
    	}
    
    	public void run() {
    		try {
    			processRequest();
    
    		} catch (Exception e) {
    			System.out.println(e);
    		}
    	}
    
    	private void processRequest() throws Exception {
    		InputStream is = socket.getInputStream();
    		DataOutputStream os = new DataOutputStream(socket.getOutputStream());
    
    		BufferedReader br = new BufferedReader(new InputStreamReader(is));
    		String requestLine = br.readLine();
    		System.out.println();
    		System.out.println(requestLine);
    		String headerLine = null;
    		while ((headerLine = br.readLine()).length() != 0) {
    			System.out.println(headerLine);
    		}
    		
    		// 从请求行中提取出文件名
    		StringTokenizer tokens = new StringTokenizer(requestLine);
    		tokens.nextToken(); // 跳过method
    		String fileName = tokens.nextToken();
    		fileName = "." + fileName;//构造请求文件名
    		
    
    		FileInputStream fis = null;
    		boolean fileExists = true;
    		// 判断请求对象是否存在
    		try {
    			fis = new FileInputStream(fileName);
    		} catch (FileNotFoundException e) {
    			fileExists = false;
    		}
    		String statusLine = null;
    		String contentTypeLine = null;
    		String entityBody = null;
    
    		if (fileExists) {// 请求文件存在构造响应的status 和 contentType
    			statusLine = "HTTP/1.1 200 OK" + CRLF;
    			contentTypeLine = "Content-type: " + contentType(fileName) + CRLF;
    		} else {// 请求文件不存在
    			statusLine = "HTTP/1.1 404" + CRLF;
    			contentTypeLine = "Content-type: " + contentType(fileName) + CRLF;
    			entityBody = "<!DOCTYPE html><HTML>" + "<HEAD><TITLE>Not Found</TITLE></HEAD>" + "<BODY>Not Found</BODY></HTML>";
    		}
    		os.writeBytes(statusLine);
    		os.writeBytes(contentTypeLine);
    		os.writeBytes(CRLF);
    		if (fileExists) {
    			sendBytes(fis, os);
    			fis.close();
    		} else {
    			os.writeBytes(entityBody);
    		}
    		os.close();
    		br.close();
    		socket.close();
    	}
    
    	private static void sendBytes(FileInputStream fis, OutputStream os) throws Exception {
    		byte[] buffer = new byte[1024];
    		int bytes = 0;
    		while ((bytes = fis.read(buffer)) != -1) {
    			os.write(buffer, 0, bytes);
    		}
    
    	}
    
    	private static String contentType(String fileName)
    
    	{
                    //根据文件名返回相应的contentType
    		if (fileName.endsWith(".htm") || fileName.endsWith(".html")) {
    			return "text/html";
    		}
    		if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) {
    			return "image/jpeg";
    		}
    		if (fileName.endsWith(".png")) {
    			return "image/png";
    		}
    		if (fileName.endsWith(".css")) {
    			return "text/css";
    		}
    		if (fileName.endsWith(".gif")) {
    			return "image/gif";
    		}
    		if (fileName.endsWith(".png")) {
    			return "image/png";
    		}
    		return "application/octet-stream";
    	}
    
    }

    四、代码测试

    测试时使用浏览器访问localhost:port,本例为127.0.0.1:6666,测试用的文件放在项目根目录即可,如使用eclipse编写的项目则需要将文件放在项目名称的目录下(有bin和src的那个目录)

    测试截图如下

    请求成功时正确返回请求文件

    请求失败时给出提示

    展开全文
  • 为了熟悉Python的网络编程,自己写了一个服务端,在浏览器联系时创建一个套接...from socket import * def HttpResponse(header,html): f = file(html) contextlist = f.readlines() context = ''.join(contextlist)

    为了熟悉Python的网络编程,自己写了一个服务端,在浏览器联系时创建一个套接字,注意参数是

    SOCK_STREAM
    ,返回一个HTML页面,代码如下

    from socket import *
    def HttpResponse(header,html):
        f = file(html)
        contextlist = f.readlines()
        context = ''.join(contextlist)
        response = "%s %d\n\n%s\n\n" % (header,len(context),context)
        return response
    Header = '''\
    HTTP/1.1 200 OK
    Context-Type: text/html
    Server: http-socket 1.0
    Context-Length: '''
    serverPort = 8888
    serverSocket = socket(AF_INET,SOCK_STREAM)
    serverSocket.bind(('',serverPort))
    serverSocket.listen(1)
    print 'The server is opening...'
    while True:
        connSocket, addr = serverSocket.accept()
        data = connSocket.recv(1024)
        print data
        connSocket.send(HttpResponse(Header,'index.html'))
        print HttpResponse(Header,'index.html')
        connSocket.close()

    效果图如下

    展开全文
  • socket 请求Web服务器过程

    千次阅读 2016-01-24 21:41:41
    因此,浏览器访问Web服务器的过程必须先有“连接建立”的发生。 而有人或许会问:众所周知,HTTP协议有两大特性,一个是“无连接”性,一个是“无状态”性。这里的“无连接”岂不是跟上面的说法有冲突?其实这里并...
  • 利用Python,我们可以搭建一个简单的Web服务器,这里我参考了: https://ruslanspivak.com/lsbaws-part1/
  • using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text;...using System.Threading.Tasks;...namespace WebServer { /// ///
  • 今天在网上看了一些网络交互方面的文章,就以为网友的例子做了下更改,在这你跟大家分享一下: 例中,服务器中的ServerSocket服务是随着tomcat启动而启动的,服务器关闭后... Socket 服务随web 启动而启动 com.blues
  • 利用C++ SOCKET编程,自我实现的一个websocket服务器,能够比较好的移植,没有使用开源库
  • 最开始我们需要明白一件事情,因为这是这篇文章的前提: ...因此,浏览器访问Web服务器的过程必须先有“连接建立”的发生。 而有人或许会问:众所周知,HTTP协议有两大特性,一个是“无连接”性,一个是
  • 网络编程学习笔记一:Socket编程

    万次阅读 多人点赞 2013-03-21 01:11:11
    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那...
  • 服务器端程序using System;using System.Net;using System.Net.Sockets;using System.Text;namespace SocketServer{ /// /// Class1 的摘要说明。 /// class Class1 { /// /// 应用程序的主入口点。 /// //定义...
  • 因此,浏览器访问Web服务器的过程必须先有“连接建立”的发生。 而有人或许会问:众所周知,HTTP协议有两大特性,一个是“无连接”性,一个是“无状态”性。这里的“无连接”岂不是跟上面的说法有冲突?其实这里...
  • C#中使用Socket实现简单Web服务器

    千次阅读 2017-03-24 11:25:02
    C#中使用Socket实现简单Web服务器 2014-08-17 16:54 by 周见智, 2431 阅读, 2 评论, 收藏, 编辑 ...上一篇博客中介绍了怎样使用socket访问web服务器。...熟悉Socket编程;熟悉HTTP协议。 上一篇主要是通过s
  • socket编程

    万次阅读 多人点赞 2018-05-29 00:24:49
    1.socket的简介 【1】什么是socket 在计算机通信领域,socket 被...socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的URL,向服务器发起请求,服务器分析接收到的URL,将对应的网页内容返回给浏览...
  • 利用socket编写简单的web 服务器

    千次阅读 2009-04-30 18:26:00
    项目名称:编写简单的web 服务器主要目的:练习socket 编程socket并发服务器可行性分析:时间 :2天;涉及知识:socket 编程、进程或线程的应用、web 服务器的服务形式需求分析:1、客户端向服务器发送请求;...
  • https://www.cnblogs.com/wunaozai/p/3926033.html https://blog.csdn.net/xxdddail/article/details/19070149
  • 我们在使用ActionScript3.0进行Socket编程的时候需要关注下面的问题,我们将在今后的学习中逐个对下面的问题进行讨论,并尽量逐渐的改进我们的程序. 1.与Socket服务器建立连接. 2.向Socket服务器发送数据. 3.从...
  • Socket编程

    2016-07-13 17:28:55
    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那...
  • linux下socket编程实现一个服务器连接多个客户端

    万次阅读 多人点赞 2020-07-30 22:58:14
    1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,...
  • Java Socket编程 - 获取WEB站点主页信息

    千次阅读 2012-10-31 23:15:50
    早就有想写一个Java Socket编程系列的文章,由于自己懒一直没动。决定从 今天开始,每周写一篇,从最简单的socket连接,到文件传输到协议实现,到 远程桌面控制,全面讲述Java socket编程的各个方面与各种技巧,从...
  • 之前做web应用一直是在本地装个Apache、Tomcat之类的软件,然后把做好的网页文件放在他们的工作目录下(如Apache的htdocs),然后打开浏览器输入127.0.0.1或localhost就可以直接访问了,好神奇,可是为什么,怎么...
  • 8.1 Socket编程 在很多底层网络应用开发者的眼里一切编程都是Socket,话虽然有点夸张,但却也几乎如此了,现在的网络编程几乎都是用Socket来编程。你想过这些情景么?我们每天打开浏览器浏览网页时,浏览器进程怎么...
  • Linux Socket编程

    千次阅读 2016-04-11 15:50:08
    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那...
  • Go语言Web服务--Socket编程

    千次阅读 2018-07-22 20:59:33
    Web服务 Web服务可以让你在HTTP协议的基础上通过XML或者JSON来交换信息。如果你想知道上海的天气预报、中国石油的股价或者淘宝商家的一个商品信息,你可以编写一段简短的代码,通过抓取这些信息然后通过标准的接口...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,352
精华内容 25,340
关键字:

socket编程web服务器