关于ServerClient的问题,请高手一定进来看看!

meapex 2003-01-15 04:45:52
请问我服务器端使用ServerClient控件通过1234端口进行侦听,在客户端用api写的程序来连接服务器,也就是用socket(),connect()等api函数实现对服务器的连接,为什么总是连接失败?是不是这样做不行,必须要用ClientSocket才可以?
...全文
99 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
l_clove 2003-01-16
  • 打赏
  • 举报
回复
对了,如果不是这个原因,就是daddr.sin_port=8888;原因,
改成daddr.sin_port=htonl(1234);//port number 1234
l_clove 2003-01-16
  • 打赏
  • 举报
回复
我知道是什么原因了
daddr.sin_addr.s_addr=inet_addr(desip.c_str());
网络字节与主机字节序的问题,
改为daddr.sin_addr.s_addr=htonl(inet_addr(desip.c_str()));

meapex 2003-01-16
  • 打赏
  • 举报
回复
问题解决了,应该用daddr.sin_port=htons(1234),而不是htonl(1234)
谢谢各位。
meapex 2003-01-16
  • 打赏
  • 举报
回复
服务器一点问题都没有,因为我的程序用ClientSocket和它连完全正常,该用上面的程序后,服务器端会出现“Asychronous socket error 10053”错误,应该是socket的同步问题,我不知道错误发生在什么地方。
halfdream 2003-01-16
  • 打赏
  • 举报
回复
先用TELNET XX.XX.XX.XX XXX 方式试一下服务端.确实服务端没有问题就集中精力看客户端.
meapex 2003-01-16
  • 打赏
  • 举报
回复
上面的8888是我的笔误,应该是1234,但问题不是这里。
苦丁香说的我也照做过了,还是不行,哪位大虾再帮忙看看,试试我的程序啊。
invalid 2003-01-15
  • 打赏
  • 举报
回复
daddr.sin_port=8888;是什么意思啊?应该是1234吧。
meapex 2003-01-15
  • 打赏
  • 举报
回复
我的server端设为 ServerSocket1->Active=ture;

client端则是用以下程序实现的,但总是connect不上server,请高人帮忙看看:
void __fastcall TConnect::Execute()
{
if(WSAStartup(WSVERS, &wsadata) == 0)
{
if 0!=(CmmdSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))
{
struct sockaddr_in daddr;
memset((void *)&daddr,0,sizeof(daddr));
daddr.sin_family=AF_INET;
daddr.sin_port=8888;
daddr.sin_addr.s_addr=inet_addr(desip.c_str());
int TimeOut = 12000;
if (setsockopt(CmmdSock, SOL_SOCKET, SO_SNDTIMEO, (char*)&TimeOut, sizeof(TimeOut)))
{
return;
}
unsigned long t = 1;
ioctlsocket(CmmdSock, FIONBIO, (unsigned long*)&t); //set nonblocking mode
if (connect(CmmdSock,(struct sockaddr *)&daddr,sizeof(daddr)))
send(CmmdSock,send_cmd,sizeof(send_cmd),0);
else
{
return;
}
struct timeval timeout ;
fd_set r;

FD_ZERO(&r);
FD_SET(CmmdSock, &r);
timeout.tv_sec = 1; //连接超时15秒
timeout.tv_usec =0;
int ret = select(0, 0, &r, 0, &timeout);
if(ret>0)//如果连接
{
//ShowMessage("ok");
}
else
{
//ShowMessage("fail");
}
closesocket(CmmdSock);
}
WSACleanup();
}
}
meapex 2003-01-15
  • 打赏
  • 举报
回复
我的seversocket端一直在监听的,还是不行啊。
不过我的连接实在线程里面使用的,不知道有没有关系。
pp616 2003-01-15
  • 打赏
  • 举报
回复
不。这没有什么兼容性的问题。
你检查一下你的serverclient是否在监听。

1,317

社区成员

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

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