Python Socket 编程 简单的 Web 服务器

     2023-02-16     75

关键词:

【中文标题】Python Socket 编程 简单的 Web 服务器【英文标题】:Python Socket Programming Simple Web Server 【发布时间】:2015-02-14 23:00:29 【问题描述】:

我正在编写我的第一个 Python 套接字编程代码,但我不知道出了什么问题。我输入运行该程序的服务器的 IP 地址以及端口号和我尝试接收的文件。我应该在浏览器中接收文件并且套接字应该关闭。相反,服务器会打印 3 次打印行“Ready to serve...”,在浏览器上显示“404 Not Found”,并且从不关闭套接字。有人有什么想法吗?

#import socket module
from socket import *
serverSocket = socket(AF_INET, SOCK_STREAM)
#Prepare a sever socket
serverSocket.bind(('', 12006))
serverSocket.listen(1)
while True:
    print 'Ready to serve...'
    #Establish the connection
    connectionSocket, addr = serverSocket.accept()
    try:
        message = connectionSocket.recv(1024)
        filename = message.split()[1]
        f = open(filename[1:])
        outputdata = f.read()
        f.close()
        #Send one HTTP header line into socket
        connectionSocket.send('HTTP/1.0 200 OK\r\n\r\n')
        #Send the content of the requested file to the client
        for i in range(0, len(outputdata)):
            connectionSocket.send(outputdata[i])
        connectionSocket.close()
    except IOError:
        #Send response message for file not found
        connectionSocket.send('404 Not Found')
        #Close client socket
        connectionSocket.close()
serverSocket.close() 

【问题讨论】:

你怎么知道它永远不会关闭套接字? 尝试打印 IOError 异常对象,这可能会提供更多信息。您可能会从打开的文件中获取 IOError。 Python 2 还是 3? 我已经在 python 2.7.5 和 Windows Vista 中尝试过,它可以工作。 @rafalopez79 我使用的是 python 2.7.9。我正在访问的文件应该放在哪里?也许这是我的问题。 我正在测试它:127.0.0.1:12006/test.py 其中 test.py 是你的 python 脚本 【参考方案1】:

感谢大家的帮助。我发现出了什么问题。我已将我的 HTML 重命名为“HelloWorld.html”,然后 Windows 自动将 .html 添加到文件末尾。因此,为了访问该文件,我需要输入 HelloWorld.html.html。我更改了文件名,然后这段代码完美运行。

【讨论】:

【参考方案2】:

这段代码应该可以工作:

# python 3
from socket import *
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('127.0.0.1', 5500))
serverSocket.listen(1)
while True:
    print("Server is running")
    connectionSocket, addr = serverSocket.accept()
    try:
        message = connectionSocket.recv(1024)
        filename = message.split()[1].decode('utf-8').strip("/")
        print(filename)
        f = open(filename)
        outputdata = f.read()
        f.close()
        connectionSocket.send('HTTP/1.0 200 OK\r\n\r\n'.encode())
        for i in range(0, len(outputdata)):
            connectionSocket.send(outputdata[i].encode())
        connectionSocket.close()
    except IOError:
        connectionSocket.send('404 Not Found'.encode())
        connectionSocket.close()
serverSocket.close() 

【讨论】:

【参考方案3】:

在这行之前filename = message.split()[1]

print(message)

在这行之后filename = message.split()[1]

print(filename)

我以为错误就在那一行。

【讨论】:

python网络编程基础--socket的简介,以及使用socket来搭建一个简单的udp小程序(代码片段)

socket介绍:socket(简称套接字),是进程间通讯的一个工具,他能实现把数据从一方传输到另一方,完成不同电脑上进程之间的通讯,它好比数据的搬运工。socket应用:不夸张来说,只要跟网络相关的应用程序或者软件都使用到了soc... 查看详情

python的socket编程(代码片段)

  socket主要用于长连接 简单DEMO:Server端:importsocketserver=socket.socket(socket.AF_INET,socket.SOCK_STREAM)server.bind((‘0.0.0.0‘,8000))server.listen()sock,addr=server.accept()#获取从客户端发送的数据data=s 查看详情

python3简单的socket编程demo(代码片段)

...bjectisrequired解决办法:解决办法非常的简单,只需要用上python的bytes和str两种类型转换的函数encode()、decode()即可!str通过encode()方法可以编码为指定的bytes;反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是by... 查看详情

醍醐灌顶python网络编程-简单示例(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!01-tcp客户端程序开发importsocketif__name__=='__main... 查看详情

听首歌的时间,简单复习下python网络编程之socket,美不美?滚雪球学python第4季14篇(代码片段)

在python中有两个不同层级的网络编程API,分别如下所示:基于socket的网络编程,较低层,采用TCP/UDP协议;基于url的网络编程,较高层,采用HTTP/HTTPS协议。如果想要系统的研究网络知识,需要掌握的... 查看详情

socket编程的简单实现

关于socket编程的简单实现,主要分成客户端、服务端两个部分。实现如下:1.服务端代码如下,注意:server端要优先于client端启动2.client端代码,以及启动后客户端和服务端之间的简单连接 (自学使用) 查看详情

Python 在线程类函数中广播更新的 Web-socket 数据

】Python在线程类函数中广播更新的Web-socket数据【英文标题】:PythonbroadcastingupdatedWeb-socketdatainathreadclassfunction【发布时间】:2020-10-0203:28:52【问题描述】:我创建了一个简单的pythonweb-socket服务器,如下所示importasyncioimportjsonimportw... 查看详情

socket编程进阶(代码片段)

socketserver虽说用Python编写简单的网络程序很方便,但复杂一点的网络程序还是用现成的框架比较好。这样就可以专心事务逻辑,而不是套接字的各种细节。SocketServer模块简化了编写网络服务程序的任务。同时SocketServer模块也是Pyt... 查看详情

基于java的socket简单聊天编程

socket编程:一:什么是socket:socket是BSDUNIX的通信机制,通常称为“套接字”,其英文原意是“孔”或“插座”。有些顾名思义,socket正如其英文原意一样,像是一个多孔插座,可以提供多个端口的连接服务。... 查看详情

简单socket服务器的基本理解

...,正在尝试了解套接字的工作原理。目前我正在尝试使用python套接字库来查看它是如何工作的。现在有些事情我无法理解。让我们举一个例子,如here所示,使用Python套接字库用Python编写的简单回显客户端和服务器。echo服务器 查看详情

简单socket()编程

客户端:1、socket(intaf,inttype,intprotocol)socket()函数用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源。如果协议protocol未指定(等于0),则使用缺省的连接方式。 对于使用一给定地址族的某一特... 查看详情

如何用socket构建一个简单的webserver(代码片段)

...静态网页最终效果完整的事例代码可以查看这里如何运行python3index.py注意我们假设你已经学习过Python的系统IO、网络编程、Http协议,如果对此不熟悉,可以 查看详情

socket编程,简单多线程服务端测试程序

socket编程,简单多线程服务端测试程序   前些天重温了MSDN关于socket编程的WSAStartup、WSACleanup、socket、closesocket、bind、listen、accept、recv、send等函数的介绍,今天写了一个CUI界面的测试程序(依赖MFC)作为补充。程序功能简... 查看详情

socket编程——一个简单的例子(代码片段)

  网络中进程之间如何通信什么是Socketsocket一词的起源socket的基本操作31socket函数32bind函数网络字节序与主机字节序33listenconnect函数34accept函数35readwrite等函数36close函数socket中TCP的三次握手建立连接详解socket中TCP的四次握... 查看详情

tcp编程,socket通讯

...UDP编程(点击打开链接)。而本文先讲述简单的TCP编程,Socket套接字连接通讯,实现简单的client与server之间的信息传输。以下是client与server之间简单的传输数据(单对单):注意:服务端先启动。然后再启动client。client:publiccla... 查看详情

python学习-网络编程(代码片段)

socketsocket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。socket与file的却别:file是对指定文件进行打开,读写,关闭socket是对服务器和客户端的socket进... 查看详情

socket网络编程

SOCKET编程一、客户端/服务器架构即C/S架构,包括1.硬件C/S架构(打印机)2.软件C/S架构(web服务)美好的愿望:最常用的软件服务器是Web服务器。一台机器里放一些网页或Web应用程序,然后启动服务。这样的服务器的任务就是接受客户... 查看详情

初次试验最简单的socket编程

因为电脑限制同时为了操作方便,所以在本地的2个不同的工作空间的不同工程下测试:workspace-1:服务器端代码ServerSocketTest.java1packagesocket;23importjava.io.BufferedReader;4importjava.io.InputStream;5importjava.io.InputStreamReader;6importjava.io.O 查看详情