请问ClientSocket怎么无法连接到服务器?

小蒋观天下 2006-02-15 04:15:05
我在窗体上有一个ClientSocket控件。如果将此控件的属性:Host和Port设置好,并将Active设置为true即可连接服务器。但我想通过程序中连接服务器,代码如下:
ClientSocket1->Host = "192.168.3.199";
ClientSocket1->Port = 8088;
ClientSocket1->Active = true;
却怎么都无法连接服务器,好像根本就没有连接的动作一样。请问,手动设置ClientSocket的属性连接是这样做的吗?谢谢。
...全文
383 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zysmiracle 2006-02-21
  • 打赏
  • 举报
回复
ServerSocket->Active = true;
否则联不上
小蒋观天下 2006-02-20
  • 打赏
  • 举报
回复
我现在仔细看了一下。原来我这串代码
MainForm->ClientSocket1->Active = false;
MainForm->ClientSocket1->Host = "192.168.3.199";
MainForm->ClientSocket1->Address = "192.168.3.199";
MainForm->ClientSocket1->Port = 8088;
MainForm->ClientSocket1->Active = true;
已经可以正常运行。因为在服务器端的OnAccept事件已经可以激活。
现在了解问题的关键了,原来是服务器端的OnClientRead事件没有激发,所以开始我认为客户端没有连接。但我就不明白了,同样一个ServerSocket,为什么用自动的ClientSocket连接就可以激发OnClientRead事件,用手动的却不行?即使在OnClientError事件中也没有信息。

开始没有完全弄清楚问题,不好意思。
zyyoung 2006-02-20
  • 打赏
  • 举报
回复
ServerSocket->active=true;
应该服务器有这个吧
Jim@luckeeinc.com 2006-02-16
  • 打赏
  • 举报
回复
你连的那个服务器中的 ServerSocket打开了没 端口写对了吗
  • 打赏
  • 举报
回复
可执行文件所在的文件夹名只能用英文和数字,不要放在中文或者其他语言的文件夹里面。
我很久以前就发现 BCB 的这个 BUG 比较变态,ClientSocket 居然和文件夹名扯到一起了,BCB 根本就不支持 Unicode, 对中文支持的也不好,但是 Socket 为什么会和文件夹关联一起了还是莫名其妙。
小蒋观天下 2006-02-16
  • 打赏
  • 举报
回复
十分感谢各位朋友的热心帮助。我刚才试了一下,还是有问题。我先自己研究一下,给大家添麻烦了。
Jim@luckeeinc.com 2006-02-16
  • 打赏
  • 举报
回复
应该触发不到onError事件,我遇到这个情况的时候是没报错什么错 不过也连不上
多连几次又好了
sunxiaohui 2006-02-16
  • 打赏
  • 举报
回复
在进行Active时,加个try,看究竟是什么错误
try
{
Socket1->Active=true;
}
catch(Exception &E)
{
ShowMessage("连接失败!"+E.Message);
return;
}
pp616 2006-02-16
  • 打赏
  • 举报
回复
处理一下onerror 看看 ErrorCode是什么就好判断是什么原因了。
Jim@luckeeinc.com 2006-02-16
  • 打赏
  • 举报
回复
代码好象是没什么错 我的代码是可以跑的 不过也遇到过LZ所说的情况 多连几次又对了
Jim@luckeeinc.com 2006-02-16
  • 打赏
  • 举报
回复
void __fastcall TForm1::FormCreate(TObject *Sender)
{
CS->Active = false;
String file = ExtractFilePath(Application->ExeName) + "config.ini" ;
TMemIniFile *test = new TMemIniFile(file);
test->ReadSectionValues("Server",config); //读出配置文件中的服务器相关参数
delete test;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BconnectClick(TObject *Sender)
{
SBar->Panels->Items[0]->Text = "";

String SIP, SPort;
SIP = this->config->Values["IP"]; //服务器ip
SPort = this->config->Values["Port"]; //服务器端口

if(SIP.Trim() == "")
{
SBar->Panels->Items[0]->Text = "服务器地址不正确";
return;
}

try
{
if(SPort.ToInt() < 0 || SPort.ToInt() > 65535)
{
SBar->Panels->Items[0]->Text = "服务器端口不正确";
return;
}
}
catch(...)
{
SBar->Panels->Items[0]->Text = "服务器端口不正确";
return;
}

if(CS->Active)
CS->Active = false;
else
{
CS->Address = SIP;
CS->Host = SIP;
CS->Port = StrToInt(SPort);
CS->Active = true;
}
}
小蒋观天下 2006-02-16
  • 打赏
  • 举报
回复
没有写错的。如果写错端口会出错的。我那样写,没有一点反映。
小蒋观天下 2006-02-15
  • 打赏
  • 举报
回复
谢谢回复。我测试了一下,也不行。
alloutoflove 2006-02-15
  • 打赏
  • 举报
回复
ClientSocket1->Active = false; //先关闭
ClientSocket1->Address = "192.168.3.199"; //这里改成address属性
ClientSocket1->Port = 8088;
ClientSocket1->Active = true;

试一下.

1,317

社区成员

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

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