AttributeError в коде Python с сокетом

У меня есть ошибка AttributeError, в которой говорится: «AttributeError: объект 'socket' не имеет атрибута 'upper'». Я почти уверен, что создал и установил соединение правильно, и все еще не уверен, что делать после консультации с документацией по сокету.

Спасибо.


import socket
from _thread import *
import threading

print_lock = threading.Lock()
list_of_clients = [] 

def threaded(data, addr, s):
  s.sendto(data.upper(), addr)
  while True:
    message = s.recv(1024)
    if not message:
      print('Bye')
      print_lock.release()
      break
    message = message.upper()
    print("Sending message to " + addr[0])
    s.sendto(message, addr)
  data.close()

def Main():

  list_of_clients = []
  serverName = 'localhost'
  serverPort = 12000

  with socket.socket(socket.AF_INET , socket.SOCK_STREAM) as serverSocket:
    serverSocket.connect((serverName, serverPort))
    while True :
      print('Ready to ping...')
      data, addr = serverSocket.accept()
      print(type(data))
      print_lock.acquire()
      print("Client connected ip:<" + str(addr) + ">")

      start_new_thread(threaded, (data, addr, serverSocket))
      print("Continue")

if __name__ == '__main__':
  Main()

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в этой строке:

s.sendto(data.upper(), addr)

data определяется здесь:

data, addr = serverSocket.accept()

Метод accept возвращает 2-кортеж, где первый элемент - это объект сокета, способный отправлять и получать данные.

Поэтому вместо передачи serverSocket в threaded вы должны передать первый элемент 2-tuple, а также любые данные, которые вы хотите отправить.

Другие вопросы по теме