user5609579
user5609579

Reputation:

"The connection was reset" on web browsers when trying to connect to a localhost socket server

I am trying to make a server in python using sockets that I can connect to on any web browser. I am using the host as "localhost" and the port as 8888.

When I attempt to connect to it, the stuff I want to be shown shows up for a split-second, and then it goes away with the browser saying "The connection was reset".
I've made it do something very simple to test if it still does it, and it does.

Is there a way to stop this?

import time
import socket
HOST = "localhost"
PORT = 8888

def function(sck):
    sck.send(bytes("test"),"UTF-8"))
    sck.close()

ssck=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ssck.bind((HOST,PORT))
ssck.listen(1)
while True:
    sck,addr=ssck.accept()
    function(sck)

Upvotes: 2

Views: 4011

Answers (2)

Neil Twist
Neil Twist

Reputation: 1159

tl;dr your function should be

def function(sck):
    sck.send(bytes("HTTP/1.1 200 OK\n\n<header><title>test page</title></header><body><h1>test page!</h1></body>"),"UTF-8"))
    sck.close()

With a server as simple as that, you're only creating a TCP socket.

HTTP protocols suggest that the client should ask for a page, something like:

HTTP/1.1 GET /somepath/somepage.html
Host: somehost.com
OtherHeader: look at the http spec

The response should then be:

HTTP/1.1 200 OK
some: headers

<header></header><body></body>

Upvotes: 0

Steffen Ullrich
Steffen Ullrich

Reputation: 123521

Probably the same problem as Perl: Connection reset with simple HTTP server, Ultra simple HTTP socket server, written in PHP, behaving unexpectedly, HTTP Server Not Sending Complete File To WGET, Firefox. Connection reset by peer?. That is you don't read the HTTP header from the browser but simply send your response and close the connection.

Upvotes: 1

Related Questions