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分的贴。分若不够可继续开贴加分,只要能够解决~谢谢各位了

解决方案 »

  1.   

    Re := recv(Socket1,bufRecv^,1024,0); //这里在等待服务器端的回复信息,如果服务器端没任何回复,则就会阻塞到这儿,你可以弄个服务器端,让服务器端接收到数据后给个回应,界面就不会死了,问题就出在这儿
      

  2.   

    //此处edtPort.text = '80',设置其他端口也不能建立连接。不知何故。。所以设置了http端口80。。这儿是服务器端口,如果你的机器没有开这样的服务端口当然不能连接成功,连接80成功说明你可能开了IIS服务另外为了自己调试网络程序方便,最好做个服务器端程序,这样能看到客户端和服务器端之间信息的传送是否正常等等
      

  3.   

    postren(小虫) 兄弟说得很对。
    呵呵我最近也在学WinsockAPI,手头有几个比较好的例子。你可以到www.tomore.com上下几个回来。