Почему мой мини-мессенджер не отправляет сообщения?

Я его тестирую на одном компьютере. Запускаю первый раз и i а потом имя пользователя. Потом я запускаю файл второй раз, ввожу c и ввожу свой IP потом имя пользователя. Когда я пытаюсь отправить сообщение оно не уходит и на "сервере" ничего не печатается.

Вопрос в чем же проблема? getip работает нормально

Вот код:

# Main
import socket
import threading
import getip
import time

def connect_server():
    ip = gl_ip
    def read_sok():
        while 1 :
            data = sor.recv(1024)
            print(data.decode('utf-8'))
    server = ip, 5050  # Данные сервера
    alias = input('Username: ') # Вводим наш псевдоним
    sor = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    sor.connect(server) # Задаем сокет как клиент
    sor.send(('['+alias+'] - Connect to server').encode('utf-8'))# Уведомляем сервер о подключении
    time.sleep(10)
    potok = threading.Thread(target= read_sok)
    potok.start()
    while 1 :
        sor.send(f'[{alias}]: {input("Send message: ")}'.encode('utf-8'))

def init_server():
    import socket

    HOST = getip.get_lan_ip()  # Standard loopback interface address (localhost)
    PORT = 5050       # Port to listen on (non-privileged ports are > 1023)
    print('Server started in IPv4 -', HOST)
    username = input('Input your username: ')

    def sending_input():
        while True:
            s.send(f'[{username}]: {input("Send message: ")}'.encode('utf-8'))
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind(('', PORT))
        s.listen(1)
        conn, addr = s.accept()
        with conn:
            print('Hello:', addr)
            sendi = threading.Thread(target = sending_input)
            sendi.start()
            while True:
                data = conn.recv(1024)
                print(data.decode('utf-8'))

mode = input('Entry mode [i\c] init server\connect cerver _')
if mode == 'i':
    
    server_t = threading.Thread( target = init_server)
    server_t.start()
    IP = getip.get_lan_ip()
    #print('Connection IP -', IP)
    """
    gl_ip = IP
    connection = threading.Thread( target = connect_server)
    connection.start()
    """

    

else:
    ip = input('Entry IPv4 _')
    gl_ip = ip
    connection = threading.Thread( target = connect_server)
    connection.start()

        

код getip:

import os
import socket

if os.name != "nt":
    import fcntl
    import struct

    def get_interface_ip(ifname):
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s',
                                ifname[:15]))[20:24])

def get_lan_ip():
    ip = socket.gethostbyname(socket.gethostname())
    if ip.startswith("127.") and os.name != "nt":
        interfaces = [
            "eth0",
            "eth1",
            "eth2",
            "wlan0",
            "wlan1",
            "wifi0",
            "ath0",
            "ath1",
            "ppp0",
            ]
        for ifname in interfaces:
            try:
                ip = get_interface_ip(ifname)
                break
            except IOError:
                pass
    return ip

def get_ip_2():
    return socket.gethostbyname(socket.gethostname())

Ответы (1 шт):

Автор решения: FotonPC

На сервере SOCK_STREAM, а на клиенте SOCK_DGRAM, естественно они друг с другом никогда не состыкуются - ответ из комментария. Спасибо большое - @andreymal sor = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) vs socket.socket(socket.AF_INET, socket.SOCK_STREAM)

→ Ссылка