首页 新闻 会员 周边 捐助

Socket 在IIS asp.net 下是不是经常容易出错?

0
悬赏园豆:5 [待解决问题]

如下代码,经常回提示 System.Net.Sockets.SocketException (0x80004005)

的错误

由于目标计算机积极拒绝,无法连接。 127.0.0.1:80
System.Net.Sockets.SocketException (0x80004005): 由于目标计算机积极拒绝,无法连接。 127.0.0.1:80

 

   public HttpData GetData(IPEndPoint address, byte[] headersData)
        {
            HttpData data = null;

            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
                socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

                socket.ReceiveTimeout = receiveTimeout;
                socket.SendTimeout = sendTimeout;

                socket.Connect(address.Address, address.Port);
                socket.Send(headersData);
                data = GetData(socket);

                socket.Shutdown(SocketShutdown.Both);
                socket.Disconnect(true);

            }
            catch (Exception ex)
            {

                if (socket.Connected)
                {
                    socket.Close();
                }

                socket.Dispose();
            }


            return data;
        }

 

 

我查看了下端口占用情况

TIME_WAIT 的就这么多

 

  TCP    127.0.0.1:80           127.0.0.1:65321        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65323        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65326        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65327        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65328        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65330        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65332        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65333        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65335        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65336        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65337        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65338        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65339        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65340        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65341        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65342        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65343        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65345        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65346        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65347        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65348        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65349        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65350        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65351        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65352        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65353        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65354        TIME_WAIT       0
  TCP    127.0.0.1:80           127.0.0.1:65355        TIME_WAIT       0

 

ESTABLISHED 状态的就非常多了

 

不知道如何解决?

 

 

 

 

fun5的主页 fun5 | 初学一级 | 园豆:4
提问于:2014-12-02 17:29
< >
分享
所有回答(2)
0

有开防火墙或其它安全软件吗?

XiaoFaye | 园豆:3087 (老鸟四级) | 2014-12-02 17:53

开了

支持(0) 反对(0) fun5 | 园豆:4 (初学一级) | 2014-12-02 17:56

@foxidea: 

会不会是自己把自己给封掉了?

支持(0) 反对(0) XiaoFaye | 园豆:3087 (老鸟四级) | 2014-12-02 17:57

关了也一样

支持(0) 反对(0) fun5 | 园豆:4 (初学一级) | 2014-12-02 17:59

@foxidea: 

网上找了下,说是因为socket被占用,还没关闭的情况下再尝试打开就会出现这个错误。你这个函数会多次调用吗?

支持(0) 反对(0) XiaoFaye | 园豆:3087 (老鸟四级) | 2014-12-02 18:04

@XiaoFaye: 是多次调用的函数

socket.Shutdown(SocketShutdown.Both);

socket.Disconnect(true);

我已经调用 这两句了,为什么还是会提示那样的错误呢?

支持(0) 反对(0) fun5 | 园豆:4 (初学一级) | 2014-12-02 18:26

@foxidea: 

在socket.Disconnect(true);后面再加个socket.Close();试试,不要只在发生错误后再执行。

支持(0) 反对(0) XiaoFaye | 园豆:3087 (老鸟四级) | 2014-12-03 03:16
0

看起来像你的Socket没有完全关闭导致的

蜗牛往前走 | 园豆:389 (菜鸟二级) | 2014-12-02 18:03

socket.Shutdown(SocketShutdown.Both);

socket.Disconnect(true);

这是没关闭么?

支持(0) 反对(0) fun5 | 园豆:4 (初学一级) | 2014-12-02 18:26

@foxidea: ESTABLISHED的意思是建立连接。表示两台机器正在通信。你的ESTABLISHED很多,表示连接均未关闭!

支持(0) 反对(0) 蜗牛往前走 | 园豆:389 (菜鸟二级) | 2014-12-02 18:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册