[問題] BCB寫好的程式卻會跳掉> <??

看板C_and_CPP作者 (傻康)時間15年前 (2010/07/29 11:29), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串1/1
就是阿.... 我在桌上電腦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
我同學的vista也是這樣相容性我不知道有沒有勾
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
文章代碼(AID): #1CKFM3d- (C_and_CPP)