Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Веб-разработка и фреймворки > Создать сокет


Автор: Areostar 14.3.2020, 20:42
Нужно создать сокет

Написал такой код:

На локалке работает! Загрузил на сервер, пытаюсь запустить gjkexf.

Цитата

File "socket.py", line 46, in run
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AttributeError: module 'socket' has no attribute 'AF_INET'


на локалке версия Python 3.8.1

на серваке 3.6, может в этом проблема или ещё в чЁм??

Код

import socket


URLS = {
    '/': 'hello index',
    '/blog': 'hello blog'
}


def generate_content(code, url):
    if code == 404:
        return '<ht>404</h1><p>Not found</p>'
    if code == 405:
        return '<ht>405</h1><p>Method not allowed</p>'
    return '<ht>{}</h1>'.format(URLS[url])


def  generate_headers(method, url):
    if not method == 'GET':
        return ('HTTP/1.1 405 Method not allowed\n\n', 405)

    if not url in URLS:
        return ('HTTP/1.1 404 Not found\n\n', 404)

    return ('HTTP/1.1 200 OK\n\n', 200)


def parse_request(request):
    parsed = request.split(' ')

    method = parsed[0]
    url = parsed[1]

    return (method, url)


def generate_response(request):
    method, url = parse_request(request)
    headers, code = generate_headers(method, url)
    body = generate_content(code, url)

    return (headers + body).encode()


def run():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind(('localhost', 5000))
    server_socket.listen()

    while True:
        client_socket, addr = server_socket.accept()
        request = client_socket.recv(1024)
        print(request)
        print()
        print(addr)

        response = generate_response(request.decode('utf-8'))

        client_socket.sendall(response)
        client_socket.close()


if __name__ == '__main__':
    run()

Автор: Areostar 15.3.2020, 14:13
переименовал фаил - заработало!

но на локлке я запрашивал как то так http://localhost:5000/

Загрузил на сервер с доменом скажем my-domen.com pfghfibdf. my.domen.com:5000/ - зависает пока таимаут не получает! может причина что у сайта https или ещё в чём?

Автор: Areostar 15.3.2020, 14:45
Как я понял надо перенацелить вот здесь
Код

server_socket.bind(('localhost', 5000))



Но на что? Domen или ip

Автор: Romikgy 15.3.2020, 21:45
Код

server_socket.bind(('0.0.0.0', 5000))

Автор: Areostar 16.3.2020, 11:12
Слелал. Пока не работает ((

Нвдо порт проверить. вечером проверю

Автор: Bulat 17.3.2020, 08:10
Может готовая библиотека есть?

Автор: Romikgy 17.3.2020, 09:59
Код

import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen(1)
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data: break
            conn.sendall(data)

https://docs.python.org/3/library/socket.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)