serversocket控件:可是我单击菜单Listen的时候总是出现list index out of bounds(0)?谢谢.
//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)
{
}
//---------------------------------------------------------------------------
问题点数:20、回复次数:6Top
1 楼Ring_Pt(已是黄昏独自愁)回复于 2006-06-01 09:59:45 得分 10
listen的那段代码没问题 你看看其他是不是有什么地方越界了Top
2 楼BlueDeepOcean(蓝色·深海)回复于 2006-06-01 10:19:13 得分 10
的确,上面的代码我看没有问题。Top
3 楼BlueDeepOcean(蓝色·深海)回复于 2006-06-01 10:20:39 得分 0
你可以参考以下例子:
..\Program Files\Borland\CBuilder5\Examples\Internet\Chat
Top
4 楼constantine(飘遥的安吉儿)回复于 2006-06-01 10:42:36 得分 0
应该是那里越界了
设置个断点,然后单步跟踪看看就知道了Top
5 楼skyergg(gg)回复于 2006-06-11 13:09:13 得分 0
你的StatusBar1 的panel为空吧Top
6 楼pengsixiang()回复于 2006-07-23 18:04:15 得分 0
这样的问题我也碰到过,我的问题出在没有使用Socket->Active = true。你的问题可能是出在Socket 没有成功的Active。你看看你的Socket 设置是不是有问题。Top




