首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Winsock2非本地拒绝

Winsock2非本地拒绝
EN

Stack Overflow用户
提问于 2013-10-07 09:06:57
回答 2查看 20关注 0票数 0

(我没有在这个问题中放入代码,因为实际的代码在这里可能并不重要。但是,如果您说它确实如此,那么我可以稍后编辑问题以将其放入其中。)

我对使用winsock2或任何其他网络应用程序接口都是新手。我有一个非常简单的服务器应用程序和客户端应用程序,其中服务器向客户端发送一个字符串,然后断开连接。

当我使用localhost127.0.0.1作为inet_addr()参数时,应用程序工作得很好,但是当我使用我的“真实”IP时,客户机应用程序只得到WSAECONNREFUSED,服务器看不到它。我确保两个应用程序的端口是相同的,协议也是相同的。

编辑在放弃网络一段时间后,我又回到了这个问题上。我认为这实际上可能与我使用路由器的事实有关,而不是我的代码中的某些内容。

EN

回答 2

Stack Overflow用户

发布于 2013-10-07 09:09:49

WSAECONNREFUSED是对等设备或中间防火墙主动拒绝连接。如果它是发出它的对等体,这意味着您获得了错误的IP地址或端口,或者您获得了正确的IP地址或端口,但服务器并未实际运行;无论如何,没有任何东西在该IP:port上侦听。如果是防火墙,请调整它。

您是否在端口号上使用了htons()

票数 1
EN

Stack Overflow用户

发布于 2014-01-20 03:43:52

inet_addr()仅适用于IP地址字符串,您必须使用gethostbyname()getaddrinfo()localhost或任何其他主机名字符串解析为IP地址。

WSACONNREFUSED表示连接在您尝试连接的远程端被主动拒绝。

如果服务器正在拒绝,这意味着没有套接字在请求的IP:端口上侦听,或者有一个套接字,但它的挂起客户端连接队列已满,因此此时它无法接受新的连接。

如果路由器拒绝,这通常意味着路由器未配置为将请求的IP:端口的入站连接转发到路由器网络上的机器。如果您有一台在路由器后面运行的服务器,并且正在尝试使用路由器的公共IP地址连接到它,则必须将路由器设置为端口转发。

如果防火墙拒绝,这通常意味着请求的端口未打开。

无论哪种方式,客户端都无法在代码中知道连接被拒绝的原因。它所能做的就是等待一段时间,然后重试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19215748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档