serversocket控件:可是我单击菜单Listen的时候总是出现list index out of bounds(0)?谢谢.

cnjsnt1995 2006-06-01 09:54:41
//Unit1.h---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ScktComp.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TClientSocket *ClientSocket1;
TServerSocket *ServerSocket1;
TMemo *Memo1;
TMemo *Memo2;
TMainMenu *MainMenu1;
TStatusBar *StatusBar1;
TSpeedButton *SpeedButton1;
TMenuItem *File1;
TMenuItem *Disconnect1;
TMenuItem *FileListenItem;
TMenuItem *Exit;
TMenuItem *FileConnectItem;
TMenuItem *N1;
void __fastcall FileListenItemClick(TObject *Sender);
void __fastcall FileConnectItemClick(TObject *Sender);
void __fastcall ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall ServerSocket1Accept(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall Memo1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift);
void __fastcall ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent,
int &ErrorCode);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
public: // User declarations
bool IsServer;
String Server;
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


//Unit1.cpp---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FileListenItemClick(TObject *Sender)
{
FileListenItem->Checked=!FileListenItem->Checked;
if (FileListenItem->Checked)
{
ClientSocket1->Active = false;
ServerSocket1->Active = true;
StatusBar1->Panels->Items[0]->Text = "Listening...";
}else
{
if (ServerSocket1->Active)
{
ServerSocket1->Active = false;
}
StatusBar1->Panels->Items[0]->Text = "";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FileConnectItemClick(TObject *Sender)
{
if(ClientSocket1->Active)
{ ClientSocket1->Active=false;
}
if(InputQuery("计算机正连接到.....","Address Name",Server))
{ if(Server.Length()>0)
{ ClientSocket1->Host=Server;
ClientSocket1->Active=true;
FileListenItem->Checked=false;

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


void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteHost;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo2->Lines->Clear();

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

void __fastcall TForm1::ServerSocket1Accept(TObject *Sender,
TCustomWinSocket *Socket)
{
IsServer = true;
StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteAddress;
}

//---------------------------------------------------------------------------

void __fastcall TForm1::Memo1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if (Key == VK_RETURN)
{
if (IsServer){ServerSocket1->Socket->Connections[0]->SendText(
Memo1->Lines->Strings[Memo1->Lines->Count - 1]); }
else
{ ClientSocket1->Socket->SendText(Memo1->Lines->Strings[
Memo1->Lines->Count -1]);}
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo2->Lines->Add(Socket->ReceiveText());
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo2->Lines->Add(Socket->ReceiveText());
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
Memo2->Lines->Add("Error connecting to:" + Server);
ErrorCode = 0;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FormCreate(TObject *Sender)
{

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

void __fastcall TForm1::Memo1Change(TObject *Sender)
{

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


...全文
506 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengsixiang 2006-07-23
  • 打赏
  • 举报
回复
这样的问题我也碰到过,我的问题出在没有使用Socket->Active = true。你的问题可能是出在Socket 没有成功的Active。你看看你的Socket 设置是不是有问题。
skyergg 2006-06-11
  • 打赏
  • 举报
回复
你的StatusBar1 的panel为空吧
constantine 2006-06-01
  • 打赏
  • 举报
回复
应该是那里越界了

设置个断点,然后单步跟踪看看就知道了
BlueDeepOcean 2006-06-01
  • 打赏
  • 举报
回复
你可以参考以下例子:
..\Program Files\Borland\CBuilder5\Examples\Internet\Chat
BlueDeepOcean 2006-06-01
  • 打赏
  • 举报
回复
的确,上面的代码我看没有问题。
Jim@luckeeinc.com 2006-06-01
  • 打赏
  • 举报
回复
listen的那段代码没问题 你看看其他是不是有什么地方越界了

1,317

社区成员

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

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