请问Socket中控制端口与数据端口的区别,

iris_福将 2007-06-15 08:42:37
各位高手!
初编网络程序,遇到了麻烦,不知该如何解决.
我用ClientSocket控件,已知ip地址、控制端口号=5000、用户名和口令,连接到服务器后,服务器端发送8002为数据端口,通知我连接到数据端口,我不知该如何连?
帮帮我!
...全文
351 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
iris_福将 2007-08-05
  • 打赏
  • 举报
回复
我没有弄懂的是:5000为控制端口,服务器端数据口为8002,它们是什么关系?我的连接方法对吗?

void __fastcall TForm1::connectClick(TObject *Sender)
{
char tmp[20];

Form2->ShowModal();
strcpy(hostname,Form2->ComboBox1->Text.c_str());
strcpy(portserv,Form2->portN->Text.c_str());

if (ClientSocket1->Active)
{
ClientSocket1->Active = false;
}

ClientSocket1->Host= hostname;
ClientSocket1->Port=atoi(portserv);
ClientSocket1->Active = true;

char *buf=(char *)malloc(ClientSocket1->Socket->ReceiveLength()+1);
memset(buf,0x00,ClientSocket1->Socket->ReceiveLength()+1);
ClientSocket1->Socket->ReceiveBuf(buf,ClientSocket1->Socket->ReceiveLength()+1); //接收 "100 connection accepted login:\r\n"
strcpy(tmp,Form2->userN->Text.c_str()); //user name
strcat(tmp,"\r\n");
ClientSocket1->Socket->SendBuf(tmp,strlen(tmp)); //发送 用户名
Memo1->Lines->Add(buf);
::Sleep(200);
memset(buf,0x00,ClientSocket1->Socket->ReceiveLength()+1);
ClientSocket1->Socket->ReceiveBuf(buf,ClientSocket1->Socket->ReceiveLength()+1); //接收 "102 password for:\r\n"
strcpy(tmp,Form2->passW->Text.c_str()); //pass word
strcat(tmp,"\r\n");
ClientSocket1->Socket->SendBuf(tmp,strlen(tmp));//发送 口令
Memo1->Lines->Add(buf);
memset(buf,0x00,ClientSocket1->Socket->ReceiveLength()+1);
::Sleep(200);
ClientSocket1->Socket->ReceiveBuf(buf,ClientSocket1->Socket->ReceiveLength()+1); //接收 "107 check passed to create data link.\r\n
//Memo1->Lines->Add(buf);
sscanf(buf,"%3s",tmp);
if(strcmp(tmp,"107")!=0)
goto lab1;
strcpy(tmp,Form2->portN->Text.c_str());
strcat(tmp,"\r\n");
::Sleep(200);
ClientSocket1->Socket->SendBuf(tmp,strlen(tmp));
memset(buf,0x00,ClientSocket1->Socket->ReceiveLength()+1);
::Sleep(200);
ClientSocket1->Socket->ReceiveBuf(buf,ClientSocket1->Socket->ReceiveLength()+1); //接收 "108 8002 is data port.\r\n"
//以上步骤接发都正确,再往下还需要再连到数据端口8002?我不知该怎样做了。
::Sleep(200);
memset(buf,0x00,ClientSocket1->Socket->ReceiveLength()+1);
::Sleep(200);
ClientSocket1->Socket->ReceiveBuf(buf,1200);
}

Y___Y 2007-06-15
  • 打赏
  • 举报
回复
一般搞一个端口进行通讯就可以了
非要搞两个就用两个ClientSocket对象

1,317

社区成员

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

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