首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

TcpClient应用。错误:远程主机强迫关闭了一个现有的连接

2013-07-08 
TcpClient应用。异常:远程主机强迫关闭了一个现有的连接。 TryDim client As TcpClient New TcpClient(12

TcpClient应用。异常:远程主机强迫关闭了一个现有的连接。

 Try
            Dim client As TcpClient = New TcpClient("127.0.0.1", 2112)
            Dim stream As NetworkStream = client.GetStream()

            Dim phoneNums As String() = phone.Split(",")
            For Each phoneNum As String In phoneNums
                phoneNum = phoneNum.Trim()
               If String.IsNullOrEmpty(phoneNum) Then
                    Continue For
                End If

                Dim data As Byte() = Encoding.GetEncoding("gb2312").GetBytes("M=" + phoneNum + ",I=" + msg + vbCr)

                stream.Write(data, 0, data.Length)

                 data = New [Byte](256) {}

                 Dim responseData As [String] = [String].Empty
                 Dim bytes As Int32 = stream.Read(data, 0, data.Length)
                 responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)

                stream.Close()
client.Close()
           Next
        Catch e As Exception
            Response.Write(e.Message)
        End Try

这是原始的VB代码运行一切正常。

 try{
                TcpClient client = new TcpClient("127.0.0.1", 2112);

               phone = phone.Trim();
               if (String.IsNullOrEmpty(phone)) 
                    return; 
               Byte[] data = Encoding.GetEncoding("gb2312").GetBytes("M=" + phone + ",I=" + msg);
                NetworkStream stream = client.GetStream();

                stream.Write(data, 0, data.Length);



                 data = new Byte[256];

                 String responseData= String.Empty;

                 int bytes= stream.Read(data, 0, data.Length);
                 responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);


                stream.Close();
client.Close();
 
            }
       catch(Exception e)
            {
            Response.Write(e.Message);
       } 


这是我改的C#代码,phone换成了单个的号码,不是vb中用逗号分隔的一串了,但是运行之后报,远程主机强迫关闭了一个现有的连接,而且报错之后再运行正确的vb代码也一直报这个错了,除非重启服务端。

我想知道我改写的代码问题出在哪里了。分数可以追加 TcpClient Sockets
[解决办法]

.GetBytes("M=" + phone + ",I=" + msg + "\r");  // vbCR

[解决办法]
GetBytes("M=" + phone + ",I=" + msg + "\r")
[解决办法]
引用:
,而且报错之后再运行正确的vb代码也一直报这个错了,除非重启服务端。 
就是因为你C#的 发送的错误数据,造成服务端接收后数据异常,而你的服务端又没做异常处理,所以服务端的Socket就挂了,此时你再用VB代码去连服务端,当然连不上。只能重启服务端

是不是服务器记录了你当前信息,你退出时没有在服务器那移除你的信息,再次连接时就会报错的
[解决办法]
引用:
Quote: 引用:

,而且报错之后再运行正确的vb代码也一直报这个错了,除非重启服务端。 
就是因为你C#的 发送的错误数据,造成服务端接收后数据异常,而你的服务端又没做异常处理,所以服务端的Socket就挂了,此时你再用VB代码去连服务端,当然连不上。只能重启服务端

是不是服务器记录了你当前信息,你退出时没有在服务器那移除你的信息,再次连接时就会报错的


不一定的,服务端挂了可能性最大。服务端没有做收异常包的处理。。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

,而且报错之后再运行正确的vb代码也一直报这个错了,除非重启服务端。 
就是因为你C#的 发送的错误数据,造成服务端接收后数据异常,而你的服务端又没做异常处理,所以服务端的Socket就挂了,此时你再用VB代码去连服务端,当然连不上。只能重启服务端

是不是服务器记录了你当前信息,你退出时没有在服务器那移除你的信息,再次连接时就会报错的


不一定的,服务端挂了可能性最大。服务端没有做收异常包的处理。。



那个IP挂掉之后,其他IP使用服务器是正常的,是为什么呢。
主要服务端我无法控制,所以比较难办。
我现在自己也在不断尝试。



如果其他IP是正常,说明你发的异常包给服务端,后服务端收到异常信息,出错了,没有把相应的IP给移除掉。造成同样的IP重新连接没反应。结论还是服务端没有做这个异常处理,你把这BUG提交给写服务端的人吧。

热点排行