Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用http协议传输空文件的python套接字服务器_Python_Sockets_Http_Networking_Server - Fatal编程技术网

使用http协议传输空文件的python套接字服务器

使用http协议传输空文件的python套接字服务器,python,sockets,http,networking,server,Python,Sockets,Http,Networking,Server,我已经开始学习使用python进行网络编程,我的服务器出现了一些问题 我正在尝试构建一个简单的服务器,它可以用一些图像、js和css来表示简单的服务器,但我不知道我的文件传输代码有什么问题,所以在谷歌搜索了一个多小时后,我放弃了。 我通过浏览器检查,它发送的html非常好,但是在页面的上部有JS代码。当我试图单独请求图像时,浏览器下载了“name_I_choose.jpg”文件,但它是0kb文件 这是我的密码: import socket import os print "server on"

我已经开始学习使用python进行网络编程,我的服务器出现了一些问题

我正在尝试构建一个简单的服务器,它可以用一些图像、js和css来表示简单的服务器,但我不知道我的文件传输代码有什么问题,所以在谷歌搜索了一个多小时后,我放弃了。 我通过浏览器检查,它发送的html非常好,但是在页面的上部有JS代码。当我试图单独请求图像时,浏览器下载了“name_I_choose.jpg”文件,但它是0kb文件

这是我的密码:

import socket
import os

print "server on"
server_socket = socket.socket()
server_socket.bind(("127.0.0.1", 80))
server_socket.listen(10)
while True:
    (client_socket, client_address) = server_socket.accept()
    try:
        data = client_socket.recv(1024)
        # print data
    except socket.error:
        print "no more requests, bye"
        break
    if not data:
        break
    lines = data.split("\r\n")
    print lines[0]
    parts = lines[0].split(" ")
    print "1: " + parts[0] + " 2: " + parts[1] + " 3: " + parts[2]
    if parts[0] == "GET" and parts[2] == "HTTP/1.1":
        print "good"
        if parts[1] == "\\" or parts[1] == "/":
            path = "path/to/root/index.html"
        else:
            path = "path/to/root" + parts[1].replace("\\", "/")
        if os.path.isfile(path):
            f = file(path, 'rb')
            size = b = os.path.getsize(path)
            print size
            types = {"txt": "text/html; charset=utf-8", "html": "text/html; charset=utf-8", "jpg": "image/jpeg",
                     "js": "text/javascript; charset=utf-8", "css": "text/css"}
            f_type = types.get(path.split(".")[1])
            data = f.read(size)
            print "sending data"
            client_socket.send("HTTP/1.0 200 " + str(size) + "\r\n" + "Content-Type: " + f_type)
            client_socket.send(data)
        else:
            print "file not found"
            print path
            client_socket.send("HTTP/1.0 404 -1\r\n")
    else:
        print "not GET HTML FORM"
    break
print "done"
client_socket.close()
server_socket.close()

可能有很多问题,所以我会感谢你的建议。谢谢:)

最后我解决了这个问题,结果发现问题出在文件读取上。 正确的操作是:

with open(path, 'rb') as infile:
            d = infile.read(1024)
            while d:
                try:
                    client_socket.send(d)
                except socket.error, msg:
                    print "socket error occurred: ", msg
                d = infile.read(1024)

运行此代码时是否可以包含一些输出?有帮助。你能说得更具体些吗?什么样的输出?对不起,我指的是这个程序的输出。您将此程序作为服务器运行,然后尝试从中获取文件,对吗?从正在运行的服务器上可以看到什么输出?我在你的代码中看到了print语句——你能给我们看看输出吗?您是如何从这个正在运行的服务器获取数据的?这是我刚刚尝试在浏览器上获取127.0.0.1时的输出:server on get/HTTP/1.1 1 1:get 2:/3:HTTP/1.1 good path/to/file/index.html 25592 sending data doneIts 127.0.1/path/to/image.jpg:server on get/imgs/abstract.jpg HTTP/1.1 1 1:get 2:/path/to/image.jpg 3:HTTP/1.1良好路径/to/root/path/to/image.jpg 37193发送数据完成