我写了一套网络通信程序,但是有问题,请大家帮忙看一下!

plane1980 2002-06-05 08:59:44
我想在客户端的文本框中输入要下载的文件名,然后点击按钮,
如果该文件在服务器端存在的话,就下载。还可以在服务器端的一
文本框中输入一个目录(如C:\WINDOWS)点击按钮,如果该目录在
客户端存在,就可以在listbox1 中显示在目录下的内容。
代码如下:
1。服务器程序的代码:
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
ShowMessage("客户端已经连入");
StatusBar1->Panels->Items[0]->Text="客户端已经连入";

}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString rcommand,rFile,Msg;
Msg=Socket->ReceiveText();
rcommand=Msg.SubString(1,5);//分解信息头
if(rcommand=="FILE_")
{
rFile=Msg.SubString(6,Msg.Length()-5);//分解文件名
if(FileExists(rFile))
{
Socket->SendText(rcommand);
TFileStream *filestream=
new TFileStream(rFile,fmOpenRead|fmShareDenyWrite);
Socket->SendStream(filestream);
filestream->Free();
}
}
else if(rcommand=="LIST_")
{
ListBox1->Items->Text=Socket->ReceiveText();
Label1->Caption=Edit1->Text;
}
else
Memo1->Text = Memo1->Text +Msg;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
ShowMessage("客户端已经断开连接");
StatusBar1->Panels->Items[0]->Text="客户端已断开连接";
Memo1->Clear();
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Msg;
Msg="LIST_"+Edit1->Text;//构造请求信息
ServerSocket1->Socket->SendText(Msg);
}
//---------------------------------------------------------------------------

2。客户端程序:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String server;
if(ClientSocket1->Active)
ClientSocket1->Close();
if(InputQuery("我的计算机连接到……","连接地址",server))
{
if(server.Length()>0)
{ClientSocket1->Host=server;
ClientSocket1->Open();
Button2->Enabled=true;
Button3->Enabled=true;
Button4->Enabled=true;
Edit1->Enabled=true;
}
}

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ClientSocket1->Close();

}
//---------------------------------------------------------------------------



void __fastcall TForm1::Button4Click(TObject *Sender)
{
if(Edit1->Text!="")
{
if(SaveDialog1->Execute())
{
FileName=SaveDialog1->FileName;
AnsiString Msg;
Msg="FILE_"+Edit1->Text;//构造请求信息
ClientSocket1->Socket->SendText(Msg);
}
}
else ShowMessage("请输入要下载的文件名");
}
//---------------------------------------------------------------------------


void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
int n;
AnsiString Header,rcommand,rFile;
void *Buf;
TMemoryStream *tmpStream;
Header=Socket->ReceiveText();
rcommand=Header.SubString(1,5);
if(rcommand=="LIST_")
{
if(DirectoryExists(rFile))
{
Socket->SendText(rcommand);
FileListBox1->Directory=rFile;
Socket->SendText(FileListBox1->Items->Text);
}
}
else
switch(ClientStatus)
{
case csWait:
if(Header=="FILE_")
ClientStatus=csFile;
break;
case csFile:
tmpStream=new TMemoryStream();
Screen->Cursor=crHourGlass;
do{
n=Socket->ReceiveBuf(Buf,sizeof(Buf));
if(n<=0)
{ShowMessage("数据传输完毕");
break;}
else
tmpStream->Write(Buf,n);
Sleep(200);
}while(true);
tmpStream->SaveToFile(FileName);
delete tmpStream;
Screen->Cursor=crDefault;
ClientStatus=csWait;
MessageBox(Handle,"下载完毕!","网络通信程序",MB_OK);
}
}
//---------------------------------------------------------------------------

一运行就说什么API ‘send’出错。这是怎么回事啊!
...全文
85 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
plane1980 2002-06-05
  • 打赏
  • 举报
回复
RE:: yangrenzhi()

我开始是从最简化代码开始做测试。放一个Serv,一个Client
一个SendText 一个在接收事件里做ShowMessage试过了,
SendText不会报错。
sncel 2002-06-05
  • 打赏
  • 举报
回复
请先传送几十M的文件进行测试,看看会不会丢包。
yangrenzhi 2002-06-05
  • 打赏
  • 举报
回复

那请最简化代码做测试。放一个Serv,一个Client

一个SendText 一个在接收事件里做ShowMessage

试试。SendText会不会报错。
plane1980 2002-06-05
  • 打赏
  • 举报
回复
不是很清楚,应该装了WinSock2(应该怎么装)
我如果只是建立连接还是可以的,可是只要传输文件却出问题,没有什么效果不说,还出错,是什么原因啦。
yangrenzhi 2002-06-05
  • 打赏
  • 举报
回复
请先确定有否安装WinSock2。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧