winsocket——api翻译出了问题??????
为什么DELPHI总是-1 而VC中正确的确实 0 呢?
以下代码是从 VC中翻译过来的:但到下面有一步总是为-1;
而VC中是0可以正确执行! 怎么办?
uses uses winsock,idwinsock2;
const MAX_HOSTNAME_LAN=256;
m_nCapPort = 56789;
IP_HDRINCL =2;
var
m_sockCap :TSocket;
err:Longint;
phe : PHostEnt;
hname:array [0..256]of char;
bopt : BOOLean;
sa : SOCKADDR_IN ;
dwBufferLen :array [0..9]of DWORD ;
dwBufferInLen,dwBytesReturned ,SIO_RCVALL: DWORD;
begin
m_sockCap := socket(AF_INET , SOCK_RAW , IPPROTO_IP);
err := gethostname(hname, 256);
pHe := gethostbyname(hname);
sa.sin_family := AF_INET;
sa.sin_port := htons(m_nCapPort);
StrPLCopy(@sa.sin_addr.S_addr, ((pHe.h_address_list)^)^, pHe.h_length);
err := bind(m_sockCap, @sa, sizeof(sa));
bopt:=TRUE;
err := setsockopt(m_sockCap, SOL_SOCKET, SO_REUSEADDR, Pchar(@bopt), sizeof(bopt));
bopt := TRUE;
err := setsockopt(m_sockCap, IPPROTO_IP, IP_HDRINCL, Pchar(@bopt), sizeof(bopt)); ///这里怎么老是-1 ???
end;
procedure TForm1.FormShow(Sender: TObject);
const wVersion =2;
var
wsaData1:TWSADATA ;
begin
WSAStartup(wVersion, wsaData1);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
WSACleanup();
end;
为什么DELPHI总是-1 而VC中正确的确实 0 呢?
以下代码是从 VC中翻译过来的:但到下面有一步总是为-1;
而VC中是0可以正确执行! 怎么办?
uses uses winsock,idwinsock2;
const MAX_HOSTNAME_LAN=256;
m_nCapPort = 56789;
IP_HDRINCL =2;
var
m_sockCap :TSocket;
err:Longint;
phe : PHostEnt;
hname:array [0..256]of char;
bopt : BOOLean;
sa : SOCKADDR_IN ;
dwBufferLen :array [0..9]of DWORD ;
dwBufferInLen,dwBytesReturned ,SIO_RCVALL: DWORD;
begin
m_sockCap := socket(AF_INET , SOCK_RAW , IPPROTO_IP);
err := gethostname(hname, 256);
pHe := gethostbyname(hname);
sa.sin_family := AF_INET;
sa.sin_port := htons(m_nCapPort);
StrPLCopy(@sa.sin_addr.S_addr, ((pHe.h_address_list)^)^, pHe.h_length);
err := bind(m_sockCap, @sa, sizeof(sa));
bopt:=TRUE;
err := setsockopt(m_sockCap, SOL_SOCKET, SO_REUSEADDR, Pchar(@bopt), sizeof(bopt));
bopt := TRUE;
err := setsockopt(m_sockCap, IPPROTO_IP, IP_HDRINCL, Pchar(@bopt), sizeof(bopt)); ///这里怎么老是-1 ???
end;
procedure TForm1.FormShow(Sender: TObject);
const wVersion =2;
var
wsaData1:TWSADATA ;
begin
WSAStartup(wVersion, wsaData1);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
WSACleanup();
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货