2016-04-23 5 views
0

Я работаю и простую программу сокетов, и мне нужно проверить значение, отправленное клиентом на сервер. Я в точке, где я могу напечатать вход клиентов на сервере, но любые данные, посланные возвращает значение ИСТИНА, когда я проверить его с «StartsWith»В python3 startswith всегда возвращается True

Код:

''' 
    Simple socket server using threads 
''' 

import socket 
import sys 
from _thread import * 

HOST = '' 
PORT = 127 # Arbitrary non-privileged port 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
print("Socket created") 

#Bind socket to local host and port 
try: 
    s.bind((HOST, PORT)) 
except socket.error as msg: 
    print("Bind failed. Error Code : " + str(msg[0]) + " Message " + msg[1]) 
    sys.exit() 

print("Socket bind complete") 

#Start listening on socket 
s.listen(10) 
print("Socket now listening") 

#Function for handling connections. This will be used to create threads 
def clientthread(conn): 

    #Sending message to connected client 
    #conn.send("Welcome to the server. Type something and hit enter") #send only takes string 

    #infinite loop so that function do not terminate and thread do not end. 
    commandz = "" 
    while True: 


     #Receiving from client 
     data = conn.recv(1024) 
     commandz += data.decode() 
     #reply = "OK..." + commandz 
     print(commandz) 
     if commandz.startswith('F'):  
      print("Forwardmove") 
     else: 
      print("Not forward") 
     if not data: 
      break 

     #conn.sendall("heard you") 

    #came out of loop 
    conn.close() 

#now keep talking with the client 
while 1: 
    #wait to accept a connection - blocking call 
    conn, addr = s.accept() 
    print("Connected with " + addr[0] + ":" + str(addr[1])) 

    #start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function. 
    start_new_thread(clientthread ,(conn,)) 

s.close() 
+0

НЕ использовать '' * импорт. Кроме того, вы уверены, что хотите низкоуровневый '_thread', а не один из высокоуровневых модулей? – ThiefMaster

+0

'127' не является непривилегированным портом. Для этого вам нужно больше 1024. – ThiefMaster

+0

Можете ли вы уточнить, что не так с импортом *? Новое на этом языке, поэтому вся обратная связь приветствуется. – WillMc

ответ

3

Каждый раз, когда вы получаете данные , вы добавляете его к переменной commandz, используя следующую строку:

commandz += data.decode() 

кажется, что вы никогда не переинициализировать commmandz. Таким образом, он всегда начинается с первых данных, которые вы получили в первый раз.

Я полагаю, что print(commandz) строка кода выводит вам что-то вроде этого:

FirstData 
FirstDataSecondData 
FirstDataSecondDataThirdDataAndEtcEtc 

Вы можете заметить, что все эти строки начинается с «F».

+0

Это сделало это. Я новичок в python, поэтому я пропустил + = конкатенацию. Спасибо за быстрый ответ. – WillMc

0

Вы должны переинициализировать commandz, иначе вы всегда будете получать выходной сигнал, начиная с F, как это только добавляет новые данные в первых данных и печатных изданий, которые

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