2011-07-02 6 views
0

この問題は過去4日間続きましたが、わかりません。別のプログラムがバイトを読むことができるように、私は自分自身にUDPパケットを使ってデータを送信しようとしています。UDP Txループは毎回正確に3970パケットで動作しなくなりました。友達のコンピュータの14386

私はパケットをはっきり読み取ることができますが、プログラムのUDP部分がハングアップする前に最大3970しか取得できません。 Glutと他のすべては正常に動作し続けます。私は私の友人に同じコードを与え、彼は彼のコンピュータでそれを走らせた。彼はハングする前に14386反復を得た。変数tempは送信されたパケット数をカウントします。 -1は悪いです。カウンタはwhileループの繰り返し回数をカウントします。私はここでの例を次のようだ:

http://msdn.microsoft.com/en-us/library/ms740148(v=vs.85).aspx

コード例:

#include "stdafx.h" 
#include <WinSock2.h> // don't forget to add in 
//Project Properties>Linker>Input>Additional Dependences [Ws2_32.lib] 
sockaddr_in dest; 
sockaddr_in local; 
WSAData data; 
static void SUDP_init(void) 
{ 
    printf("--[UDP Socket Initialized]--\r\n"); 
    WSAStartup(MAKEWORD(2, 2), &data); 

    local.sin_family = AF_INET; 
    local.sin_addr.s_addr = inet_addr("127.0.0.1"); //same as localhost 
    local.sin_port = 6000; 

    dest.sin_family = AF_INET; 
    dest.sin_addr.s_addr = inet_addr("127.0.0.1"); 
    dest.sin_port = htons(6000); 

    bind(socket(AF_INET, SOCK_DGRAM, 0), (sockaddr *)&local, sizeof(local)); 
    printf("Socket Bound...\r\n"); 
} 
static int counter = 0; 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    SUDP_init(); 
    while(1){ 
     char packet[30]; 
     sprintf(packet, "%0.3f,%0.3f,%0.3f", 
     55.4, 
     16.1, 
     -27.88); 

     int temp = sendto(socket(AF_INET, SOCK_DGRAM, 0), packet, strlen(packet), 0, (sockaddr *)&dest, sizeof(dest)); 
     if(temp>=1){ 
      counter++; 
     } 
     printf("Bytes Sent: %d, Counter: %d\r\n",temp,counter); 
    } 
    return 0; 
}  

答えて

4

あなたはまたbindために別のものを割り当てている、ループ(sendtoの最初の引数)に新しいソケットを割り当てていますしかし、これらは決して解放されません。最終的にソケットハンドルを使い果たすことで、プログラムがハングしてしまいます。

代わりに、私は十分に感謝する方法がわからない、その後bindsendto

+0

にそれを渡し、それを捨てるのではなく、それを保存、SUDP_initに一度のソケットを割り当てます!私は手紙に指示に従って、もっと読むべきだった。悪魔は詳細です。 – Jack

+0

そして、あなたが約4000でソケットを使い果たした理由は、MAXUSERPORTのデフォルト値が5000であり、いくつかのソケットがシステムサービスによって使用されているからです。 (ここを参照してください:http://technet.microsoft.com/en-us/library/cc938196.aspx、http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport- what-it-is-it-s-important.aspx)を使用して、 –

関連する問題