var //全局变量,
Socket1: TSocket; procedure TForm1.FormCreate(Sender: TObject); //初始化调用WSAStartUp方法
var
wsData: TWSAData;
begin
Memo1.Lines.Clear;
if WSAStartup(MakeWord(2,0),wsData) <> 0 then begin
Memo1.Lines.Add('建立Socket失败');
Exit;
end
else
Memo1.Lines.Add('建立Socket成功');
end;procedure TForm1.Button1Click(Sender: TObject); //建立连接按扭
var
SocketAddr: TSockAddr;
Re: Integer;
begin
Socket1 := socket(AF_INET,SOCK_STREAM,0);
if socket1 =SOCKET_ERROR then begin
memo1.Lines.Add('建立Socket失败');
Exit;
end;
Memo1.Lines.Add('建立Socket成功');
ZeroMemory(@SocketAddr,sizeof(SocketAddr));
SocketAddr.sin_family := PF_INET;
SocketAddr.sin_addr.S_addr := inet_addr(Pchar(edtHostIP.Text));//此处edtHostid.text = '127.0.0.1',设置过我机器的局域网内IP 192.168.1.12也是不行
SocketAddr.sin_port := htons(StrToInt(edtPort.Text));//此处edtPort.text = '80',设置其他端口也不能建立连接。不知何故。。所以设置了http端口80。。
Re := connect(Socket1,SocketAddr,SizeOf(SocketAddr));
if Re <> 0 then begin
Memo1.Lines.Add('连接失败');
Exit;
end;
Memo1.Lines.Add('连接成功');
end;
procedure TForm1.Button2Click(Sender: TObject);//发送数据按扭
var
info: string;
BufSend,bufRecv: PChar;
Re: Integer;
begin
GetMem(BufSend,1024);
ZeroMemory(BufSend,1024);
info := edtSend.Text;
StrPCopy(BufSend,info);
Re := Send(Socket1,BufSend^,length(BufSend),0);
if Re = SOCKET_ERROR then begin
Memo1.Lines.Add('发送数据失败');
Exit;
end;
Memo1.Lines.Add('发送数据成功'); GetMem(bufRecv,1024);
ZeroMemory(bufRecv,1024);
Re := recv(Socket1,bufRecv^,1024,0); //上述操作全部(初始化,建立连接,发送数据)返回成功,执行到此执行不下去了,也不报错,界面死住。。
info := StrPas(bufRecv);
mmEcho.Lines.Add(Info);
FreeMem(BufSend);
Freemem(bufRecv);
end;请教高手如何解决,我查了资料没找到错误。这是个最基本的小例子,完全按照先后秩序执行以下步骤
1.初始化WinSock动态链接库
2.建立一个Socket连接
3.连接主机
4.跟主机进行信息交流 //到这步出错
5.关闭Socket对象
6.释放Winsocket动态链接库
只能开100分的贴。分若不够可继续开贴加分,只要能够解决~谢谢各位了
Socket1: TSocket; procedure TForm1.FormCreate(Sender: TObject); //初始化调用WSAStartUp方法
var
wsData: TWSAData;
begin
Memo1.Lines.Clear;
if WSAStartup(MakeWord(2,0),wsData) <> 0 then begin
Memo1.Lines.Add('建立Socket失败');
Exit;
end
else
Memo1.Lines.Add('建立Socket成功');
end;procedure TForm1.Button1Click(Sender: TObject); //建立连接按扭
var
SocketAddr: TSockAddr;
Re: Integer;
begin
Socket1 := socket(AF_INET,SOCK_STREAM,0);
if socket1 =SOCKET_ERROR then begin
memo1.Lines.Add('建立Socket失败');
Exit;
end;
Memo1.Lines.Add('建立Socket成功');
ZeroMemory(@SocketAddr,sizeof(SocketAddr));
SocketAddr.sin_family := PF_INET;
SocketAddr.sin_addr.S_addr := inet_addr(Pchar(edtHostIP.Text));//此处edtHostid.text = '127.0.0.1',设置过我机器的局域网内IP 192.168.1.12也是不行
SocketAddr.sin_port := htons(StrToInt(edtPort.Text));//此处edtPort.text = '80',设置其他端口也不能建立连接。不知何故。。所以设置了http端口80。。
Re := connect(Socket1,SocketAddr,SizeOf(SocketAddr));
if Re <> 0 then begin
Memo1.Lines.Add('连接失败');
Exit;
end;
Memo1.Lines.Add('连接成功');
end;
procedure TForm1.Button2Click(Sender: TObject);//发送数据按扭
var
info: string;
BufSend,bufRecv: PChar;
Re: Integer;
begin
GetMem(BufSend,1024);
ZeroMemory(BufSend,1024);
info := edtSend.Text;
StrPCopy(BufSend,info);
Re := Send(Socket1,BufSend^,length(BufSend),0);
if Re = SOCKET_ERROR then begin
Memo1.Lines.Add('发送数据失败');
Exit;
end;
Memo1.Lines.Add('发送数据成功'); GetMem(bufRecv,1024);
ZeroMemory(bufRecv,1024);
Re := recv(Socket1,bufRecv^,1024,0); //上述操作全部(初始化,建立连接,发送数据)返回成功,执行到此执行不下去了,也不报错,界面死住。。
info := StrPas(bufRecv);
mmEcho.Lines.Add(Info);
FreeMem(BufSend);
Freemem(bufRecv);
end;请教高手如何解决,我查了资料没找到错误。这是个最基本的小例子,完全按照先后秩序执行以下步骤
1.初始化WinSock动态链接库
2.建立一个Socket连接
3.连接主机
4.跟主机进行信息交流 //到这步出错
5.关闭Socket对象
6.释放Winsocket动态链接库
只能开100分的贴。分若不够可继续开贴加分,只要能够解决~谢谢各位了
呵呵我最近也在学WinsockAPI,手头有几个比较好的例子。你可以到www.tomore.com上下几个回来。