部分程序如下:implementation// Import Winsock 2 functions
const WinSocket = 'WS2_32.DLL';
function socket; external winsocket name 'socket';
.........procedure TForm1.Button1Click(Sender: TObject);
var
local : TSockAddr;
skt : TSocket;begin
skt:=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
if(skt=INVALID_SOCKET)then
begin
StatusBar1.SimpleText:='Error:Create Socket Failed!';
exit;
end;
bOpt:=1;
ret:=SetSockOpt(skt, IPPROTO_IP, IP_HDRINCL, @bOpt, SizeOf(bOpt));
if ret = SOCKET_ERROR then
begin
Memo1.lines.add('setsockopt(IP_HDRINCL) failed: '+IntToStr(WSAGetLastError));
exit;
end;
ZeroMemory(@local,sizeof(local));
local.sin_family:=AF_INET;
local.sin_addr.S_addr:=inet_addr(pchar('192.168.0.1')); bind(skt, local, sizeof(local));
end;
程序总是在执行到socket(AF_INET,SOCK_RAW,IPPROTO_RAW)时返回值总是INVALID_SOCKET到底是错那拉?还有就是怎么使用ioctlsocket接受所有的数据包?还有就是怎么用WSAIoctl来注册WSA的输入输出组件?最好举个例子。谢谢!
const WinSocket = 'WS2_32.DLL';
function socket; external winsocket name 'socket';
.........procedure TForm1.Button1Click(Sender: TObject);
var
local : TSockAddr;
skt : TSocket;begin
skt:=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
if(skt=INVALID_SOCKET)then
begin
StatusBar1.SimpleText:='Error:Create Socket Failed!';
exit;
end;
bOpt:=1;
ret:=SetSockOpt(skt, IPPROTO_IP, IP_HDRINCL, @bOpt, SizeOf(bOpt));
if ret = SOCKET_ERROR then
begin
Memo1.lines.add('setsockopt(IP_HDRINCL) failed: '+IntToStr(WSAGetLastError));
exit;
end;
ZeroMemory(@local,sizeof(local));
local.sin_family:=AF_INET;
local.sin_addr.S_addr:=inet_addr(pchar('192.168.0.1')); bind(skt, local, sizeof(local));
end;
程序总是在执行到socket(AF_INET,SOCK_RAW,IPPROTO_RAW)时返回值总是INVALID_SOCKET到底是错那拉?还有就是怎么使用ioctlsocket接受所有的数据包?还有就是怎么用WSAIoctl来注册WSA的输入输出组件?最好举个例子。谢谢!
解决方案 »
- 请教:如何把类名作为参数传递。
- 怎么测试服务器是否开放?客户是否能成功连上服务器???
- DLL中的FORM上的按钮的ShowHint属性不能为TRUE,否则即将出现Hint时就出错?
- 请用Delphi开发中间件的朋友与我讨论
- 急!!补码、取反的问题
- 请看这样一条语句!
- PostMessage消息的制定资料
- 如何捕捉点按钮前focus所在的控件以便在按钮程序中作不同的处理。
- ADO连接Access数据库怎会这么慢!
- help! I'm new.
- 武汉的兄弟散分了!
- 【【【【【【【【【【【【【【【【【【大家伙有没有见过这种控件TppReport,TppViewer,TppDBPipeline好像是关于报表方面的】】】】】】】
var
socket1:=socket(AF_INT,SOCK_STREAM,0);
if (socket1=INVALID_SOCKET) then
begin
........
end;
var
wsdata : TWSAdata;
begin
if (WSAStartup(MAKEWORD(2, 2), wsdata)<>0) then
begin
StatusBar1.SimpleText:='Init Failed!';
exit;
end
else
StatusBar1.SimpleText:='Init success!';
end;
To: sdlzlj(邵东烂仔刘佳)
我现在需要的是原始数据套接字类型