unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Buttons,winsock,ComCtrls,StdCtrls,ExtCtrls;type
  TForm1 = class(TForm)
    Label1: TLabel;
    edtport: TEdit;
    btnlisten: TButton;
    btnreceive: TButton;
    btnstop: TButton;
    btnquit: TButton;
    StatusBar1: TStatusBar;
    SaveDialog1: TSaveDialog;
    procedure FormCreate(Sender: TObject);
    procedure btnlistenClick(Sender: TObject);
    procedure btnreceiveClick(Sender: TObject);
    procedure btnstopClick(Sender: TObject);
    procedure btnquitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    stoptrans:Boolean;
    intrans:Boolean;
    Sever:TSocket;
    procedure RecvFile(filename:string);
    { Public declarations }
  end;var
  Form1: TForm1;
const BlockLen=1024*4;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
aWSAData:TWSAData;
begin
  if WSAStartup($0101,aWSAData)<>0 then
    raise Exception.Create('不能启动动态链接库');
  MessageBox(handle,aWSAData.szDescription,'winsock版本',MB_OK);
end;procedure TForm1.btnlistenClick(Sender: TObject);
var
  ca:SOCKADDR_IN;
begin
  Sever:=Socket(PF_INET,SOCK_STREAM,IPPROTO_IP);
  if Sever=INVALID_SOCKET then
  begin
    statusbar1.SimpleText:='创建套接字失败';
    Exit;
  end;
  ca.sin_family:=PF_INET;
  ca.sin_port:=htons(strtoint(Trim(edtport.Text)));
  ca.sin_addr.S_addr:=INADDR_ANY;
  if bind(Sever,ca,sizeof(ca))=SOCKET_ERROR then
  begin
    StatusBar1.SimpleText:='绑定接受端套接字错误!请更改端口';
    Closesocket(Sever);
    Exit;
  end
  else
    Statusbar1.SimpleText:='绑定接收端套接字成功!';
  listen(Sever,5);
  btnlisten.Enabled:=false;
  btnstop.Enabled:=true;
end;
procedure TForm1.RecvFile(filename:string);
var
  ftrans:file of Byte;
  recelen:integer;
  Recvsocket:TSocket;
  BlockBuf:array[0..BlockLen-1] of Byte;
  ra:SOCKADDR_IN;
  ra_len:integer;
begin
  ra_len:=sizeof(Ra);
  RecvSocket:=accept(Sever,@ra,@ra_len);
  AssignFile(ftrans,filename);
  ReWrite(ftrans);
  stoptrans:=false;
  intrans:=true;
  recelen:=recv(RecvSocket,BlockBuf,BlockLen,0);
  while(recelen>0) and (not stoptrans) do
  begin
    BlockWrite(ftrans,BlockBuf[0],recelen);
    Application.ProcessMessages;
    recelen:=recv(RecvSocket,BlockBuf,Blocklen,0);
    if stoptrans then
    begin
      CloseFile(ftrans);
      CloseSocket(RecvSocket);
      intrans:=false;
      Messagebox(handle,'停止传送','提示',MB_OK);
      Exit;
    end;
  end;
  CloseFile(ftrans);
  Closesocket(RecvSocket);
  intrans:=false;
  if(recelen=SOCKET_ERROR) then
   MessageBox(handle,'传输异常终止','提示',MB_OK)
  else
   Messagebox(handle,'客户端已经关闭,文件可能传输完成','提示',MB_OK);
end;procedure TForm1.btnreceiveClick(Sender: TObject);
begin
  if(Sever=INVALID_SOCKET) then
  begin
    MessageBox(handle,'还没有进行监听,请先进行监听','提示',MB_OK);
    Exit;
  end;
  if SaveDialog1.Execute then
  RecvFile(savedialog1.FileName);
end;
//出错就是下面这个过程中
//出错信息是Missing operator or semicolon
//Incompatible types: 'Boolean' and 'procedure, untyped pointer or untype
procedure TForm1.btnstopClick(Sender: TObject);
begin
   stoptrans:=true
   if Sever <> INVALID_SOCKET then Closesocket(Sever);
   Sever:=INVALID_SOCKET;
   btnstop.Enabled:=false;
   btnlisten.Enabled:=true;
end;procedure TForm1.btnquitClick(Sender: TObject);
begin
  Close;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if intrans then
    if Messagebox(handle,'正在接收文件,停止吗?','提示',MB_YESNO)=IDNO then
     abort;
  if Sever<>INVALID_SOCKET then
      closesocket(Sever);
  if WSACleanup<>0 then
    Messagebox(handle,'清除动态链接库错误','提示',MB_OK)
  else
    Messagebox(handle,'清除动态链接库成功','提示',MB_OK)
end;end.
出错信息是Missing operator or semicolon
Incompatible types: 'Boolean' and 'procedure, untyped pointer or untyped parameter'清高手帮帮忙,谢谢大家!!!

解决方案 »

  1.   

    if WSACleanup<>0 then
        Messagebox(handle,'清除动态链接库错误','提示',MB_OK)
      else
        Messagebox(handle,'清除动态链接库成功','提示',MB_OK)
    end;
    缺了个分号:Messagebox(handle,'清除动态链接库成功','提示',MB_OK);
      

  2.   

    //出错就是下面这个过程中
    //出错信息是Missing operator or semicolon
    //Incompatible types: 'Boolean' and 'procedure, untyped pointer or untype
    procedure TForm1.btnstopClick(Sender: TObject);
    begin
       stoptrans:=true
       if Sever <> INVALID_SOCKET then Closesocket(Sever);
       Sever:=INVALID_SOCKET;
       btnstop.Enabled:=false;
       btnlisten.Enabled:=true;
    end;
    可是显示错误在这