2014-10-29 2 views
0

저는 서버 클라이언트 아키텍처를위한 간단한 파이썬 클라이언트를 만들고 있습니다. 문제는 내가 C에서 문자열로 정수를 변환하고 그것을 통해 파이썬 클라이언트에 UDP를 보내 정수로 변환하려고하면 예외가 발생합니다. C로 널 종료 문자열이있을 수 있다고 생각했기 때문에 널 터미네이터는 없지만 기쁨은 없앴습니다. 어떤 도움을 주시면 감사하겠습니다.Python에서 null로 끝나는 문자열을 Int로 변환합니다.

서버에서 정보를 수신하는 Python (클라이언트) 코드 스 니펫.

while True: 
    try: 
     p_ort = client_socket.recvfrom(1024) 
     portnumber = p_ort[0] 

     portnumber.strip() 
     #portnumber = portnumber[:-1] 
     #portnumber.rstrip("\0") 

     #this is where i try to convert the string into integer but the exception is thrown 
     try: 
      port_number = int(portnumber) 
     except: 
       print "Exception" 

    except: 
     print "timeout!" 
     break 

이것은 클라이언트에 값을 보내는 서버의 코드 조각입니다.

void sendDataToClient(int sfd , int index ) 
    { 

      char portNum[9] = {0}; 
      sprintf(portNum , "%d" , videos[index].port); //videos[index].port is an integer 

      if(sendto(sfd , &(portNum) , 9 , 0 , (struct sockaddr *)&client , len) == -1) 
      { 
       perror("sendto()"); 
      } 

     printf("\nClient Stuff sent!\n"); 
    } 
+0

간단하고 최소한의 예를 제공하면 사람들을 도울 수 있습니다. 이 경우, 수신하는 데이터 (파이썬 측)와이를 해석하는 코드. – goncalopp

+0

문제가 발생한 한도에 맞게 코드를 편집했습니다. –

+0

'portnumber.strip()'은'portnumber'를 변경하지 않지만 제거 된 문자열을'반환합니다'. – ch3ka

답변

1

아마도 null을 먼저 제거해야합니다. 예를 들어

:

portnumber = int(portnumber.strip('\x00')) 

내가 일반적으로 널 터미네이터를 제거하는 방법입니다. portnumber의 인쇄물을 보지 않고 이것이 올바른 접근법인지 알기는 어려울 것입니다.

+0

절대적으로 훌륭합니다! 나를 위해 일했다! 내가 얻을 수없는 것은 null 종결자를 제거하는 다른 방법을 시도했지만 작동하지 않는 것입니다. 나는 'portnumber.rstrip ("\ 0")'시도했지만 전혀 도움이되지 않았다. 왜 그렇게 했습니까? –

+0

@AliAbbasJaffri C에서 널 바이트 \ 0은 실제로 파이썬에서 \ x00 인 16 진수 값 0x00이기 때문입니다. – ballsatballsdotballs

+0

그게 편리해야 해! 도와 주셔서 정말로 고맙습니다! –

관련 문제