首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >奇怪的C# SocketException

奇怪的C# SocketException
EN

Stack Overflow用户
提问于 2011-03-19 11:09:58
回答 3查看 1.2K关注 0票数 1

在测试我的Client-Server程序时,我在尝试连接到不同路由器上的服务器时遇到了一个奇怪的异常:

连接尝试失败,因为连接方在一段时间后未正确响应,或已建立的连接失败,因为连接的主机未能响应。

在本地网络中,客户端可以很好地连接到服务器,但是当它在internet上时,它就无法工作了。

我将端口转发到1250 (我正在使用的端口),并使用SimplePortForwarding (http://www.simpleportforwarding.com/)验证了该端口是否打开并正常工作。

我的实现基于本教程:http://www.developerfusion.com/article/3918/socket-programming-in-c-part-1/

你知道哪里出问题了吗?谢谢!

下面是服务器监听方法:

代码语言:javascript
运行
复制
    public void startListening(int port)
    {
        lock(_locker)
        {
            _listeningSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                // Bind socket to local endpoint, and listen for incoming connections
                IPEndPoint ipEndpoint = new IPEndPoint(IPAddress.Any, port);
                _listeningSocket.Bind(ipEndpoint);
                _listeningSocket.Listen(10);

                waitForNewClient();

                // successfully started listening
                _isListening = true;

            } catch (SocketException e)
            {
                // failed for some strange reason
                _isListening = false;
            }
        }
    }

以下是客户端连接代码:

代码语言:javascript
运行
复制
    public String connect(String ipAddress, int port)
    {
        lock(_locker)
        {
            if (!_connecting)
            {
                _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse(ipAddress), port);

                try
                {
                    _socket.Connect(endpoint);
                    _connected = true;
                    waitForData();

                    _eventManager.queueEvent(new PlayerJoinedEvent(PlayerJoinedEvent.PLAYER_JOINED, name));
                } catch (SocketException e)
                {
                    // Exception is thrown HERE
                    return e.Message;
                }
            }
        }

        return "";
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-19 13:37:55

确保您的服务器IP地址为public,除非无法访问。

检查此link中是否有私有地址空间。

票数 0
EN

Stack Overflow用户

发布于 2011-03-19 12:07:41

您打开了服务器或客户端路由器上的端口1250?需要在服务器路由器上打开它。您可能需要确保服务器已连接到DMZ端口和/或在服务器路由器上启用了DMZ。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2011-03-20 07:44:58

我解决了这个问题。

我使用的IP地址是从ipconfig获得的内部ip地址,但我需要使用的IP地址是从http://www.whatsmyip.org/等服务获得的外部IP地址。

我仍然不明白为什么这两个数字是不同的。

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

https://stackoverflow.com/questions/5359802

复制
相关文章

相似问题

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