求助:socket编程中,connect 10060错误

qq52168 2009-08-24 10:53:04
在一个ftp服务器中,ClientSock接受客户端,然后在处理客户端PORT命令时,ToSock,toSock_sin的初始化都没问题,但为何接下来的connect语句会出现10060的错误?而且真个程序到这里就卡了,不得不退出。
请高手们不吝赐教!!!
谢谢!!!!!!
主要代码如下:
ClientSock = accept (WinSocket, (struct sockaddr *) &accept_sin, (int *) &accept_sin_len);

closesocket (WinSocket);

while(1)
{
memset(szServerA,0, sizeof (szServerA));
iReturn = recv (ClientSock, szServerA, sizeof (szServerA), 0);
if( /*其他命令*/){}
else if ((strncmp(szServerA, "PORT", 4) == 0))
{
/*获取客户端ip为data_ip*/
/*获取客户端端口为data_port*/
SOCKET ToSocket= socket (AF_INET, SOCK_STREAM, 0);
sockaddr_in toSock_sin;

toSock_sin.sin_family = AF_INET;
toSock_sin.sin_port = htons (data_port);
toSock_sin.sin_addr.s_addr = htonl (data_ip);
if(connect (ToSocket, (struct sockaddr *)&toSock_sin, sizeof(toSock_sin)) == SOCKET_ERROR )
{
wsprintf(str,"425 Cannot open data connection (%s %d)!\nSocket error %d\r\n", data_ip, data_port, WSAGetLastError() );
}
else
wsprintf(str,"200 Port command okay!\r\n ");

send(ClientSock, str, strlen(str), 0);
}
}
...全文
11545 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cybertitan 2009-12-10
  • 打赏
  • 举报
回复
测试网络,通过isa2004上网,客户端经常出现10060连接问题,从微软网站找了个解决办法

1. Start Registry Editor (Regedt32.exe) and go to the following subkey: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

2. On the Edit menu, click Add Value, and then add the following information: Value Name: TcpMaxDataRetransmissions
Value Type: REG_DWORD – Number
Valid Range: 0 – 0xFFFFFFFF
Default Value: 5 Decimal
New Value: 10 Decimal

3. Click OK and then quit Registry Editor.

4. Reboot after registry change has been made.

提供参考

楼主是要开发类似于Outlook EXpress之类的邮件客户端程序吗?
这个应该是有封装好的函数的
邮件服务器socket连接玩了,是要由命令才会响应的,最好用封装的邮件服务器操作函数
qq52168 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 tttyd 的回复:]
引用 10 楼 qq52168 的回复:
引用 8 楼 tttyd 的回复:
引用 7 楼 qq52168 的回复:
引用 6 楼 tttyd 的回复:
引用 3 楼 qq52168 的回复:
引用 1 楼 darkchampion 的回复:
连接超时

检查一下端口什么的

用ftp直接登录可不可以

从windows自带ftp客户端登陆成功的,其他的的ftp命令也都成功,唯独dir,ls,get等几个服务要先通过PORT命令建立新的数据连接,就会卡到这里了

还有2楼的:
我是在一台电脑和虚拟机上运行服务器端和客户端的,应该都是有启动的吧

在你对应的机器上的程序,在对于的端口上,必须有accept类似的代码来接受connect请求才行。


你是说在客户端操作吗?可是这个客户端是windows系统自带的,怎么搞啊?

晕死,你的socket端口又不是windows保留的端口,即使是,客户端机器也需要有相应的程序启动才行。
像你这种情况,你的客户端没有accpet程序,你调用connect又如何能连接呢?

你连接一个不存在的东西会成功吗?


先谢谢你的耐心回帖!
你的意思是客户端那边的问题吗?服务器这里没办法处理?
还有啊,这段代码里客户端已经告诉了自己的开放端口data_port和地址data_ip,这样服务器端去连接它也不行?


对,应该是客户端没有接受服务器的连接
[/Quote]

用的是windows自带的啊,CMD -> ftp 192.168.1.115登陆的,这客户端没法改了 。。。
雪影 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qq52168 的回复:]
引用 8 楼 tttyd 的回复:
引用 7 楼 qq52168 的回复:
引用 6 楼 tttyd 的回复:
引用 3 楼 qq52168 的回复:
引用 1 楼 darkchampion 的回复:
连接超时

检查一下端口什么的

用ftp直接登录可不可以

从windows自带ftp客户端登陆成功的,其他的的ftp命令也都成功,唯独dir,ls,get等几个服务要先通过PORT命令建立新的数据连接,就会卡到这里了

还有2楼的:
我是在一台电脑和虚拟机上运行服务器端和客户端的,应该都是有启动的吧

在你对应的机器上的程序,在对于的端口上,必须有accept类似的代码来接受connect请求才行。


你是说在客户端操作吗?可是这个客户端是windows系统自带的,怎么搞啊?

晕死,你的socket端口又不是windows保留的端口,即使是,客户端机器也需要有相应的程序启动才行。
像你这种情况,你的客户端没有accpet程序,你调用connect又如何能连接呢?

你连接一个不存在的东西会成功吗?


先谢谢你的耐心回帖!
你的意思是客户端那边的问题吗?服务器这里没办法处理?
还有啊,这段代码里客户端已经告诉了自己的开放端口data_port和地址data_ip,这样服务器端去连接它也不行?
[/Quote]

对,应该是客户端没有接受服务器的连接
qq52168 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 arong1234 的回复:]
还有一个问题,你的服务器不要侦听在127.0.0.1哦,如果这样,任何其他ip访问都会失败

[/Quote]
谢谢!
我是用ftp 192.168.1.115 登陆的,这样应该没你说的那个问题吧?
qq52168 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tttyd 的回复:]
引用 7 楼 qq52168 的回复:
引用 6 楼 tttyd 的回复:
引用 3 楼 qq52168 的回复:
引用 1 楼 darkchampion 的回复:
连接超时

检查一下端口什么的

用ftp直接登录可不可以

从windows自带ftp客户端登陆成功的,其他的的ftp命令也都成功,唯独dir,ls,get等几个服务要先通过PORT命令建立新的数据连接,就会卡到这里了

还有2楼的:
我是在一台电脑和虚拟机上运行服务器端和客户端的,应该都是有启动的吧

在你对应的机器上的程序,在对于的端口上,必须有accept类似的代码来接受connect请求才行。


你是说在客户端操作吗?可是这个客户端是windows系统自带的,怎么搞啊?

晕死,你的socket端口又不是windows保留的端口,即使是,客户端机器也需要有相应的程序启动才行。
像你这种情况,你的客户端没有accpet程序,你调用connect又如何能连接呢?

你连接一个不存在的东西会成功吗?
[/Quote]

先谢谢你的耐心回帖!
你的意思是客户端那边的问题吗?服务器这里没办法处理?
还有啊,这段代码里客户端已经告诉了自己的开放端口data_port和地址data_ip,这样服务器端去连接它也不行?
arong1234 2009-08-25
  • 打赏
  • 举报
回复
还有一个问题,你的服务器不要侦听在127.0.0.1哦,如果这样,任何其他ip访问都会失败
雪影 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qq52168 的回复:]
引用 6 楼 tttyd 的回复:
引用 3 楼 qq52168 的回复:
引用 1 楼 darkchampion 的回复:
连接超时

检查一下端口什么的

用ftp直接登录可不可以

从windows自带ftp客户端登陆成功的,其他的的ftp命令也都成功,唯独dir,ls,get等几个服务要先通过PORT命令建立新的数据连接,就会卡到这里了

还有2楼的:
我是在一台电脑和虚拟机上运行服务器端和客户端的,应该都是有启动的吧

在你对应的机器上的程序,在对于的端口上,必须有accept类似的代码来接受connect请求才行。


你是说在客户端操作吗?可是这个客户端是windows系统自带的,怎么搞啊?
[/Quote]
晕死,你的socket端口又不是windows保留的端口,即使是,客户端机器也需要有相应的程序启动才行。
像你这种情况,你的客户端没有accpet程序,你调用connect又如何能连接呢?

你连接一个不存在的东西会成功吗?
qq52168 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tttyd 的回复:]
引用 3 楼 qq52168 的回复:
引用 1 楼 darkchampion 的回复:
连接超时

检查一下端口什么的

用ftp直接登录可不可以

从windows自带ftp客户端登陆成功的,其他的的ftp命令也都成功,唯独dir,ls,get等几个服务要先通过PORT命令建立新的数据连接,就会卡到这里了

还有2楼的:
我是在一台电脑和虚拟机上运行服务器端和客户端的,应该都是有启动的吧

在你对应的机器上的程序,在对于的端口上,必须有accept类似的代码来接受connect请求才行。
[/Quote]

你是说在客户端操作吗?可是这个客户端是windows系统自带的,怎么搞啊?
qq52168 2009-08-25
  • 打赏
  • 举报
回复
再问一下,在PORT模式下,要建立新的数据通道,是否需要新建一个SOCKET来连接???
雪影 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qq52168 的回复:]
引用 1 楼 darkchampion 的回复:
连接超时

检查一下端口什么的

用ftp直接登录可不可以

从windows自带ftp客户端登陆成功的,其他的的ftp命令也都成功,唯独dir,ls,get等几个服务要先通过PORT命令建立新的数据连接,就会卡到这里了

还有2楼的:
我是在一台电脑和虚拟机上运行服务器端和客户端的,应该都是有启动的吧
[/Quote]
在你对应的机器上的程序,在对于的端口上,必须有accept类似的代码来接受connect请求才行。
qq52168 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 leitianjun 的回复:]
连接超时,用CMD ->FTP IP地址 测一下,然后用netstat -an 查一下连接的TCP协议的端口!
如果对方是UNIX系统,用netstat -rn
[/Quote]

我的服务器是在本地机上的,用ftp ip 能成功登陆
cmd ->netstat -an 里面显示我的客户端端口开着的
  • 打赏
  • 举报
回复
连接超时,用CMD ->FTP IP地址 测一下,然后用netstat -an 查一下连接的TCP协议的端口!
如果对方是UNIX系统,用netstat -rn
qq52168 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 darkchampion 的回复:]
连接超时

检查一下端口什么的

用ftp直接登录可不可以
[/Quote]
从windows自带ftp客户端登陆成功的,其他的的ftp命令也都成功,唯独dir,ls,get等几个服务要先通过PORT命令建立新的数据连接,就会卡到这里了

还有2楼的:
我是在一台电脑和虚拟机上运行服务器端和客户端的,应该都是有启动的吧
雪影 2009-08-24
  • 打赏
  • 举报
回复
10060错误
由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

检查一下data_ip设备有没有启动。即IP为data_ip端的服务器进程有没有启动。
DarkChampion 2009-08-24
  • 打赏
  • 举报
回复
连接超时

检查一下端口什么的

用ftp直接登录可不可以

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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