[問題] BCB寫好的程式卻會跳掉> <??
就是阿....
我在桌上電腦windows XP下 用Borland c++ Builder 2007 寫了一個抓網路封包程式
由於我是新手 所以參考網路上別人寫的依樣畫葫蘆 導致自己不是很懂原理
寫成功了 也可以順利跑....
但是我把程式帶到筆電 windows vista下 給他跑
卻一開始就自動跳掉了....我實在不懂原因...
所以我寫了一個小程式碼測試 也是一樣的結果
------------------------以上是廢話很長的前言--------------------------------
我把測試程式碼完整貼上
#include <vcl.h>
#pragma hdrstop
#pragma warning( disable: 4996 )
#include <winsock2.h>
#include <windows.h>
#include "Test.h"
#pragma comment( lib, "ws2_32.lib" )
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#define LS_HI_PART(x) ((x>>4) & 0x0F)
#define LS_LO_PART(x) ((x) & 0x0F)
#define LS_MAX_PACKET_SIZE 65535
#ifndef SIO_RCVALL
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
#endif
typedef struct _IP_HEADER_
{
BYTE ver_ihl;
BYTE type;
WORD length;
WORD packet_id;
WORD flags_foff;
BYTE time_to_live;
BYTE protocol;
WORD hdr_chksum;
DWORD source_ip;
DWORD destination_ip;
DWORD Option_Padding;
} IPHEADER;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void get_this_machine_ip(char *_retIP)
{
char host_name[128];
struct hostent *hs;
struct in_addr in;
memset( host_name, 0x00, sizeof(host_name) );
gethostname(host_name,128);
hs = gethostbyname(host_name);
memcpy( &in, hs->h_addr, hs->h_length );
strcpy( _retIP, inet_ntoa(in) );
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
struct sockaddr_in sock_sniff;
SOCKET sniff_socket = -1;
WSAData sa_data;
int optval = 1;
DWORD dwLen = 0;
char packet[LS_MAX_PACKET_SIZE];
WORD ver;
IPHEADER *ip_header = NULL;
char ipSrc[20], ipDest[20], thisIP[20];
int iRet = 0,i=0;
ver = MAKEWORD(2,2);
WSAStartup(ver, &sa_data);
sniff_socket = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
if ( sniff_socket == SOCKET_ERROR )
{
exit(-1);
}
memset( thisIP, 0x00, sizeof(thisIP) );
get_this_machine_ip(thisIP);
sock_sniff.sin_family = AF_INET;
sock_sniff.sin_port = htons(0);
sock_sniff.sin_addr.s_addr = inet_addr(thisIP);
if ( bind( sniff_socket, (struct sockaddr *)&sock_sniff, sizeof(sock_sniff) ) == SOCKET_ERROR )
{
exit(-2);
}
if ( WSAIoctl( sniff_socket,
SIO_RCVALL,
&optval,
sizeof(optval),
NULL,
0,
&dwLen,
NULL,
NULL ) == SOCKET_ERROR )
{
exit(-3);
}
while (true)
{
iRet = recv( sniff_socket, packet, LS_MAX_PACKET_SIZE, 0 );
ip_header = (IPHEADER *)packet;
if ( iRet < sizeof(IPHEADER) )
continue;
if ( LS_HI_PART(ip_header->ver_ihl) != 4 )
continue;
i++;
if (i==5) {
Label1->Caption=i;
break ;
}
}
}
//---------------------------------------------------------------------------
問題就是我在我筆電vista下跑此程式
按下按鈕之後
就會自動關掉.....
大概知道是因為有寫"錯的會exit"
但不懂錯的原因......因為在我桌電XP下就可以正常執行
請問是什麼問題阿???
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.78.209
推
07/29 12:23, , 1F
07/29 12:23, 1F
推
07/29 14:19, , 2F
07/29 14:19, 2F
→
07/29 14:21, , 3F
07/29 14:21, 3F
→
07/29 15:05, , 4F
07/29 15:05, 4F
→
07/29 20:34, , 5F
07/29 20:34, 5F
→
07/29 20:34, , 6F
07/29 20:34, 6F
→
07/29 23:48, , 7F
07/29 23:48, 7F
→
07/29 23:48, , 8F
07/29 23:48, 8F