2017-01-08 5 views
0

Я пытаюсь написать код клиент-сервер. Я добавил меню в код клиента. и в зависимости от ввода от клиента я пытался добавить случаи в код сервера. Я могу отправить выбранный клиент на серверный код, но не могу выбрать случай из полученных данных. Вот мой код.Невозможно прочитать ввод от клиентской программы

server.py

импорта сокет

импорт SYS

импорта ОС

s1 = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

печати ('socket created s1')

ServerAddress = ('локальный', 2000)

печати ('начиная сервер на', АдресСервера)

s1.bind (АдресСервера)

s1.listen (3)

время Правда:

print('waiting for connection') 

connection, clientaddress = s1.accept() 

print ('connecting with', clientaddress) 

command = connection.recv(1000) 

print (command) 

if command == '1': 

    print('entered into 1st if') 

    try: 

     filename = connection.recv(1000) 

     with open(filename, 'rb') as filetosend: 

      for data in filetosend: 

       connection.sendall(data) 

    finally: 

     connection.close() 

if command == '2': 

    print('entered into 2st if') 

    filelist = os.listdir('C:\Rahul') 

    connection.sendall(filelist) 

if command == '3': 

    print('entered into 3st if') 

    s1.close() 

    break 

Client.py

импорт SYS

импорта ОС

импорта гнездо

s1 = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

ServerAddress = ('локальный', 2000)

print ('подключение к серверу on'), serveraddress

s1.connect (serveraddress)

попробовать:

a = input('Enter you choice: \n 1-Get file \n 2-Get List \n 3-quit \n') 

while True: 

    if a == 1: 

     s1.send('1') 

     b = input('enter file name: ') 

     s1.send(b) 

     downloadDir = r'C:\Users\rahul\Desktop' 

     with open(os.path.join(downloadDir, b), 'wb') as filetowrite: 

      while True: 

       data = s1.recv(1000) 

       if not data: 

        break 

       filetowrite.write(data) 

      filetowrite.close() 

     s1.close() 

    elif a == 2: 

     s1.send('2') 

     #s1.sendall(' send all files list ') 

     filelist = s1.recv(1000) 

     print (filelist) 

    elif a == 3: 

     x = False 

     print('closing connection') 

     s1.close()  

наконец: s1.close

ответ

1

Попробуйте добавить, кроме блока тоже в сценарии клиента, ваш код будет работать после этого. И я предлагаю вам использовать raw_input для целей ввода в сокетах и ​​форматировать тип данных на входе, чтобы избежать ошибок в программе.

import sys, os, socket s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serveraddress = ('localhost' , 2000) print ('connecting to server on'), serveraddress s1.connect(serveraddress) try: a = int(raw_input('Enter you choice: \n 1-Get file \n 2-Get List \n 3-quit \n')) while True: if a == 1: s1.send('1') b = str(raw_input('enter file name: ')) s1.send(b) # downloadDir = '\\root\\' # with open(os.path.join(downloadDir, b), 'wb') as filetowrite: # while True: # data = s1.recv(1000) # if not data: # break # filetowrite.write(data) # filetowrite.close() print "It worked till here." s1.close() elif a == 2: # s1.send('2') # #s1.sendall(' send all files list ') # filelist = s1.recv(1000) # print (filelist) print "It also worked till here." elif a == 3: x = False print "Closing Connection" s1.close() except: print 'It Gave an Error'

Это работало отлично.

+0

Благодарим вас за помощь Vipin. Это решило мою проблему. У меня все еще есть некоторые ошибки. Я буду работать над этим. –

+0

Рад, что он помог^_^ –

+0

Но я все еще получаю сообщение об ошибке в код сервера при чтении ввода, отправленного клиентом для выбора случая. –

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

  • Нет связанных вопросов^_^