Найти - Пользователи
Полная версия: Чёртовы сокеты в Py 3!!!
Начало » Python для новичков » Чёртовы сокеты в Py 3!!!
1
Oris_37
Проблема с запуском “клиента”….

Сервер:

#!/usr/bin/env python3
# -*- coding: utf-8 -*
import time
import socket
def send_answer(conn, status="200 OK", typ="text/plain; charset=utf-8", data=""):
    data = data.encode("utf-8")
    conn.send(b"HTTP/1.1 " + status.encode("utf-8") + b"\r\n")
    conn.send(b"Server: simplehttp\r\n")
    conn.send(b"Connection: close\r\n")
    conn.send(b"Content-Type: " + typ.encode("utf-8") + b"\r\n")
    conn.send(b"Content-Length: " + bytes(len(data)) + b"\r\n")
    conn.send(b"\r\n")# после пустой строки в HTTP начинаются данные
    conn.send(data)
def parse(conn, addr):# обработка соединения в отдельной функции
    data = b""
    while not b"\r\n" in data: # ждём первую строку
        tmp = conn.recv(1024)
        if not tmp:   # сокет закрыли, пустой объект
            break
        else:
            data += tmp
    if not data:      # данные не пришли
        return        # не обрабатываем
    udata = data.decode("utf-8")
    # берём только первую строку
    udata = udata.split("\r\n", 1)[0]
    # разбиваем по пробелам нашу строку
    method, address, protocol = udata.split(" ", 2)
    if method != "GET" or address != "/time.html":
        send_answer(conn, "404 Not Found", data="Не найдено")
        return
    answer = """<!DOCTYPE html>"""
    answer += """<html><head><title>Время</title></head><body><h1>"""
    answer += time.strftime("%H:%M:%S %d.%m.%Y")
    answer += """</h1></body></html>"""
    send_answer(conn, typ="text/html; charset=utf-8", data=answer)
sock = socket.socket()
sock.bind(("", 8080))
sock.listen(5)
try:
    while 1: # работаем постоянно
        conn, addr = sock.accept()
        print("New connection from " + addr[0])
        try:
            parse(conn, addr)
        except:
            send_answer(conn, "500 Internal Server Error", data="Ошибка")
        finally:
            # так при любой ошибке
            # сокет закроем корректно
            conn.close()
finally: sock.close()
# так при возникновении любой ошибки сокет
# всегда закроется корректно и будет всё хорошо

Клиент:

#!/usr/bin/env python3
# -*- coding: utf-8 -*
import socket
conn = socket.socket()
conn.connect(("127.0.0.1", 14900))
conn.send(b"Hello! \n")
data = b""
tmp = conn.recv(1024)
while tmp:
    data += tmp
    tmp = conn.recv(1024)
print( data.decode("utf-8") )
conn.close()
# при открытии соединения:
conn = socket.socket()
conn.connect( ("yandex.ru", 80) )
conn.setblocking(0)
# в скрипте, читающем данные:
try: data = conn.recv(1024)
except socket.error: # данных нет
    pass # тут ставим код выхода
else: # данные есть
    print(data)
    # если в блоке except вы выходите,
    # ставить else и отступ не нужно
# скрипт, читающий данные, запускаем на каждом кадре
# при создании сервера:
conn = socket.socket()
conn.bind( ("", 8989) )
conn.listen(100)
conn.setblocking(0)
# в скрипте, который получает клиентов:
try: client, addr = conn.accept()
except socket.error: # данных нет
    pass # тут ставим код выхода
else: # данные есть
    client.setblocking(0) # снимаем блокировку и тут тоже
    parse(client, addr)
    # если в блоке except вы выходите,
    # ставить else и отступ не нужно
# скрипт, получающий клиентов, запускаем на каждом кадре

И Собственно “рак” в компиляции:

Traceback (most recent call last):
File “EProgram/Projects/QtDes/Client.py”, line 7, in <module>
conn.connect((“127.0.0.1”, 14900))
ConnectionRefusedError: Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
Я Нашёл соответствующую тему здесь на форуме, но мне это не помогло(cmd, ipy) выдают тоже самое
py.user.next
python.org. socket. example
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB