如何实现:向指定ip的电脑的8000端口,发送一个指令,如"view..",并且接收这个端口返回的数据包(50分)

  • 主题发起人 主题发起人 dwqxj
  • 开始时间 开始时间
D

dwqxj

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现:向指定ip的电脑的8000端口,发送一个指令,如"view..",并且接收这个端口返回的数据包!谢谢
 
你是打算直接用Socket还是用Indy呢?
Indy中的TCP组件就适合你的要求,而且容易使用
 
请教各位大侠,
不管socket or indy? 又例子就好!
 
顶上去,
我也想知道答案!
哪位高手说一下.
 
我也想知道如何得到對方查看的返回時間!!
 
Socket一般在Windows下都是异步方式处理这种问题比较麻烦
而Indy系列使用的是阻塞式Socket,也就是说操作Socket就像操作文件一样
写入数据,然后读入数据
在Indy工作其间,其所在的线程不能进行其它工作
 
用tcpclient控件就可以轻松实现
 
对于又的东西使用INDY并不好用的。
INDY庞大的结构掩盖了它本身的BUG。无法让人看清楚传输的实质!
[:)]
 
有例子吗,各位朋友?
tcpclient or indy ?
 
呵呵.我用VC写过一个简单的UDP传送例子.不知是否有需要?

你在数据发送出去以后.还要收到返回数据?那只能用TCP了.TCP的更简单,
 
直接用SOCKET就行了,做成被管理器(服务器)/管理器(客户),要简单就找木马的代码去吧
 
直接用SOCKET
 
我用的是UDP来实现的.不知道对你有没有帮助.
type
TForm1 = class(TForm)
UDPClient: TIdUDPClient;
IP: TEdit;
Port: TEdit;
Send: TButton;
Rece: TMemo;
SendStr: TEdit;
procedure SendClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

procedure TForm1.SendClick(Sender: TObject);
var
ThisMessage: String;
ReceivedString: String;
SendBuff: Array of Byte;
lnI: Integer;
begin
UDPClient.Active := False;
UDPClient.ReceiveTimeout := 500;
UDPClient.Port := StrToInt(Port.Text);
UDPClient.Host := IP.Text;
UDPClient.Active := True;

ThisMessage := SendStr.Text;
setlength(SendBuff, Length(ThisMessage) div 2);
for lnI :=0 to (Length(ThisMessage) div 2)-1 do
SendBuff[lnI] := StrToInt('$' + copy(ThisMessage, lni*2+1, 2));
UDPClient.SendBuffer(SendBuff, Length(ThisMessage) div 2);

ReceivedString := UDPClient.ReceiveString();
if ReceivedString = '' then
Rece.Lines.Add('No response received from the server after ' + IntToStr(UDPClient.ReceiveTimeout) + ' millseconds.')
else
Rece.Lines.Add('Received: ' + ReceivedString);
end;
 
谢谢各位,还是好人多
谁有SOCKET 例子?谢谢!
 
function StartSock(Host:PAnsichar;Port:Integer):boolean;
{---------------------------------------------
函数名:StartSock
作用:与远程建立连接
----------------------------------------------}
begin
Remoo:=TRUE;
WSAStartUp(MakeWord(1, 1), WSAData);
sSocket := WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, nil, 0, 0);
setsockopt(sSocket, SOL_SOCKET, SO_REUSEADDR, @Remoo, sizeof(Remoo));
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_addr.s_addr:=inet_addr(Host);
SockAddrIn.sin_port := htons(Port);
while Connect(sSocket,@SockAddrIn,SizeOf(SockAddrIn))=-1 do
begin
Connect(sSocket,@SockAddrIn,SizeOf(SockAddrIn));
sleep(2000);
end;
buf:='000'+GetOsInfo();
StrCopy(buffer,PChar(buf));
Send(sSocket,buffer,length(buf),0);
recv(sSocket,buffer,SizeOf(buffer),0);
WSACleanup;
result := true;
end;
 
接受答案了.
 

Similar threads

后退
顶部