過去 4 日間、この問題で立ち往生しており、理解できないようです。別のプログラムがバイトを読み取れるように、UDP パケットを使用して自分自身にデータを送信しようとしています。
パケットを明確に読み取ることができますが、プログラムの UDP 部分がハングする前に 3970 までしか取得できません。Glut と他のすべては正常に動作し続けます。友人に同じコードを渡すと、彼はそれを自分のコンピューターで実行しました。彼は、ハングするまでに 14386 回の反復を行いました。変数 temp は、送信されたパケットの数をカウントします。-1は悪いです。counter は 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;
}