2013-06-12 60 views
0

我想分配一個函數傳給它的端口號。收到的端口號在收到時正確顯示,但當我嘗試將該端口號分配給新的套接字時,該端口號未分配,並且每次都分配其他號碼52428。我盡力找出錯誤我自己,但我失敗了:(請幫我下面是我的代碼:。使用newSocket.sin_port = htons(portNumber)將端口號分配給套接字時出錯;

DWORD WINAPI newrecvThreadProcedure(LPVOID param) 
{  
    newRecvThreadDetailStruct* myDetailStruct = (newRecvThreadDetailStruct*) (param); 
    char ipNumber[12], newDetail[256], threadNumber_char[12], 
     *detail = myDetailStruct>newsocketDetail; 
    int portNumber, threadNumber_int = myDetailStruct->threadNum; 
    sscanf(detail,"%s %d",ipNumber,&portNumber); 
    char displayPortNum[12]; 
    itoa(portNumber,displayPortNum,10); 
    MessageBox(NULL, displayPortNum,"portnumber", MB_ICONINFORMATION); //Port Number displayed here is the value that I want i.e. 8880 
// ======================================================================================= 
// Creating New Socket Now 
    WSADATA wsa; 

    //Initialise winsock 
    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) 
     { 
    //"WinSock Initialization FAILED" 
     return 0; 
     } 

    //Create a socket 
    SOCKET newSocketIdentifier; 
    SOCKADDR_IN newSocket; 
    if((newSocketIdentifier = socket(AF_INET , SOCK_DGRAM , 0)) == INVALID_SOCKET) 
     { 
     //"Socket Creation Failed", 
     exit(EXIT_FAILURE); 
     } 
    //Socket Created 

    //Prepare the sockaddr_in structure 
    newSocket.sin_family = AF_INET; 
    newSocket.sin_addr.s_addr = INADDR_ANY; 
    newSocket.sin_port = htons(portNumber); 
    char char_port[12],*client_ip = inet_ntoa(newSocket.sin_addr); 
    int int_port = ntohs(newSocket.sin_port); 
    itoa(int_port,char_port,10); 
    MessageBox(NULL,char_port,client_ip,MB_ICONEXCLAMATION | MB_OK); /* Port number 
displayed here is 52428 and IP Address is 0.0.0.0*/ 
} 

回答

2

字符串緩衝區ipNumber太小,這只是12個字符,但一個完整的IP可能是"255.255.255.255"這是16個字符(包括終止)。

所以你可能有一個緩衝區溢出,導致不確定的行爲。

你應該使用調試器在結構的各個領域看,一看就知道一切都很好。