AttributeError в коде Python с сокетом - PullRequest
0 голосов
/ 29 апреля 2019

У меня AtrributeError, который говорит: «AttributeError: объект сокета не имеет атрибута« 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()

1 Ответ

0 голосов
/ 29 апреля 2019

Проблема заключается в следующей строке:

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

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

data, addr = serverSocket.accept()

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...