2016-11-03 14 views
-1

Хорошо, сначала я знаю, что этот вопрос задан довольно много раз, однако ни один из предыдущих вопросов не включал использование сокетов UDP. Я протестировал этот код без использования сокетов UDP, и он работает нормально. Спасибо заранее, вот мой код:Объект 'int' не является вызываемым (python 2.7 server/client calculator)

Client.py:

from socket import * 
serverName = "localhost" 
serverPort = 12000 
clientSocket = socket(AF_INET , SOCK_DGRAM) 
num1 = int(input("1st number: \n")) 
func = raw_input("Function (+,-,*,/): \n") 
num2 = int(input("2nd number: \n")) 
clientSocket.sendto(int(num1), func, int(num2)(serverName, serverPort)) 
modifiedMessage, serverAddress = clientSocket.recvfrom(2048) 
print (modifiedMessage) 
clientSocket.close() 

Server.py:

from socket import * 
serverPort = 12000 
serverSocket = socket (AF_INET , SOCK_DGRAM) 
serverSocket.bind (('', serverPort)) 
print ('The Server is ready ') 
while 1: 
    num1, func, num2, clientAddress = serverSocket.recvfrom(2048) 
if func =='+': 
    modifiedMessage = num1 + num2 
    else: 
     pass 
if func =='-': 
    modifiedMessage = num1 - num2 
    else: 
     pass 
    if func =='*': 
     modifiedMessage = num1 + num2 
    else: 
     pass 
    if func =='/': 
     modifiedMessage = num1/num2 
    else: 
     pass 
    serverSocket.sendto(modifiedMessage, clientAddress) 

Traceback (самый последний вызов последнего): Файл "C: \ Пользователи \ Myhat2you \ Desktop \ client.p ", строка 8, в clientSocket.sendto (int (num1), func, int (num2) (имя_сервера, serverPort)) TypeError: объект 'int' не может быть вызван

+0

Не могли бы вы отправить сообщение об ошибке _exact_ прямо в ваш вопрос? –

+2

'int (num2) (serverName, serverPort)' является подозрительным. но трассировка будет приветствоваться ... –

+1

Когда вы спрашиваете об Исключении, которое производит ваша программа, вы должны опубликовать полный Traceback - в нем есть подсказки, например, какая строка вызвала проблему. Вы пытались [поймать исключение] (https://docs.python.org/3/tutorial/errors.html#handling-exceptions) и проверили переменные, напечатав их? Это то, что вы оценили? – wwii

ответ

0

Проблема действительно здесь:

clientSocket.sendto(int(num1), func, int(num2)(serverName, serverPort)) 

Согласно docs, sendto принимает str, не int, str и int.

Однако отслеживающий Вы получили там, потому что Вы пытались вызвать некоторое int значение в качестве функции (скажем num2 является "5", то int(num2) будет 5, и Вы звоните 5(serverName, serverPort).

Если Вы хотите отправить эти значения на сервер, я предлагаю одно из следующих действий:

1) отправить их по одному

2) отправить их в виде строки, разделенной специальными символами (т.е.. |)

+0

Любая идея, как я мог бы отправить num1, func и num2 на сервер, чтобы ответить расчетом? –

+0

Спасибо, я попробую! –

Смежные вопросы