2014-10-29 66 views
0

我正在为服务器客户端体系结构制作一个简单的python客户端。问题出现时,我将一个整数转换为C中的字符串,并通过UDP发送给python客户端,并尝试将其转换为整数,引发异常。我认为这可能是因为在C终止空字符串,所以我甚至试图消除空终止符,但没有喜悦。任何帮助将不胜感激。将空终止字符串转换为Python中的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

提供一个简单的,最小的例子可以帮助人们帮助你。在这种情况下,只是你收到的数据(python方)和解释它的代码。 – goncalopp 2014-10-29 16:13:52

+0

我已经编辑我的代码,只是为了创造问题的极限。 – 2014-10-29 16:21:29

+0

'portnumber.strip()'不改变'portnumber',但是''返回'被剥离的字符串。 – ch3ka 2014-10-29 16:24:00

回答

1

您可能只需要首先去掉null。

例如:

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

是如何我通常脱掉空终止子。这将是很难知道这是否是正确的方法,虽然没有看到一个打印的端口号。

+0

绝对精彩!为我工作! 我无法得到的是,我一直在尝试其他方法来剥离那个空终止符,但似乎没有工作。我尝试了'portnumber.rstrip(“\ 0”)',但这似乎没有任何帮助。这是为什么? – 2014-10-29 16:28:31

+0

@AliAbbasJaffri因为在C中,空字节\ 0实际上是十六进制值0x00,它在python中是\ x00。 – ballsatballsdotballs 2014-10-29 16:31:14

+0

这应该来得方便!非常感谢你的帮助! – 2014-10-29 16:33:25