CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  网络及通讯开发

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

楼主cnjsnt1995()2006-06-01 09:54:41 在 C++ Builder / 网络及通讯开发 提问

//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

相关问题

关键词

得分解答快速导航

  • 帖主:cnjsnt1995
  • Ring_Pt
  • BlueDeepOcean

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo