大家好,放了两天的假,我研究了一下winsock编程,原来并不是很难的,
下面这个程序只是一个演示,很多的地方还需要修改,这里仅仅是起一个抛砖引
玉的作用。比如说没有加参数判断,来自定义server,而是直接探测127.0.0.1
(也就是自己了),然后也没有加错误的判断,你可以用wsgetlasterror来取得错误,
然后加上适当的判断。
最主要的一点是这个程序是单线程的,所以速度很慢,因为我对线程不是
很熟悉,所以希望高手把这个程序改一改,然后贴出来,好吗?还有就是好象还是
三次握手,要怎么只进行三次握手中的两次,还要等我慢慢的来研究了。
=======================================================================
版权没有,转载自由!!!不过希望你能贴出改进的版本!
搞得都是自己问自己答了,呵呵,100分啊,又不能给自己,所以,谁把多线程的
写出来,谁就可以得分,最好是给一些线程的相关资料。比如说用createthread
怎么来实现,而用tthread 类怎么来实现!!!!!!!!!!!!!!!!!
=======================================================================
源程序如下:
program Project1;
{$APPTYPE CONSOLE}
uses winsock,sysutils,windows;
const
startport=1;
stopport=30;
var
s:tsocket;
i,j,error:integer;
server:tsockaddrin;
wsa:twsadata;
begin
writeln('===============================================================================');
writeln('== Very Slow Port Scanner ==');
writeln('== Edit by whaoye@21cn.com ==');
writeln('===============================================================================');
writeln(' == ==');
writeln(' == ==');
writeln(' =====================================================================');
writeln(' == ==');
wsastartup(makeword(1,1),wsa);
server.sin_family:=AF_INET;
server.sin_addr.S_addr:=inet_addr('127.0.0.1');
for i:=startport to stopport do
begin
s:=socket(AF_INET, SOCK_STREAM, 0);
server.sin_port:=htons(i);
error:=connect(s,server,sizeof(server));
if error=0 then
begin
write(' == Scan port: '+inttostr(i));
for j:=0 to 5-length(inttostr(i)) do
write(' ');
writeln(' [ok] ==');
closesocket(s);
end;
end;
writeln(' == ==');
writeln(' =====================================================================');
writeln(' == ==');
writeln(' == ==');
writeln('===============================================================================');
writeln('== Thank you for your test! Good luck! ==');
writeln('== Edit by whaoye@21cn.com ==');
writeln('===============================================================================');
wsacleanup();
end.