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'清高手帮帮忙,谢谢大家!!!
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'清高手帮帮忙,谢谢大家!!!
Messagebox(handle,'清除动态链接库错误','提示',MB_OK)
else
Messagebox(handle,'清除动态链接库成功','提示',MB_OK)
end;
缺了个分号:Messagebox(handle,'清除动态链接库成功','提示',MB_OK);
//出错信息是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;
可是显示错误在这