none
socket状态出现假死?发送XML文件的问题 RRS feed

  • 问题

  • 我的C/S程序建立里tcp连接后发送xml文件的,各位大大帮我查看一下代码

            private void btn_send_xml_Click(object sender, EventArgs e)//发送报文
            {            xc.Generate_CmdXml(cmd, filePath_send, Int32.Parse(this.textBox_channel.Text));
    
                if (xc.send_xml(filePath_send, client.Client))
                {
                    nLogInfo.Write("Success:" + filePath_send + "发送成功");   
                }
    
            }
    
    		 public void Generate_CmdXml(string cmd,string filePathName,int channel) //生成控制或查询报文
            {
                try
                {
                    XmlTextWriter xmlWriter = new XmlTextWriter(filePathName, null); //使用unicode编码
                    xmlWriter.Formatting = Formatting.Indented;
                    xmlWriter.WriteStartDocument();
                    xmlWriter.WriteComment("指令:" + cmd + "\r\n   Create Time:" + System.DateTime.Now.ToString());
    
                    xmlWriter.WriteStartElement("Video");   //根元素
                   xmlWriter.WriteElementString("channel",channel.ToString());
                    xmlWriter.WriteElementString("cmd", cmd);
                    xmlWriter.WriteEndElement();
                    xmlWriter.Flush();
                    xmlWriter.WriteEndDocument();
                    xmlWriter.Close();
                }
                catch (System.Exception ex)
                {
                    nLogInfo.Write("生成报文失败:GenerateXml()");
                }
            }
    
    		public bool send_xml(string filePathName,Socket sock) //通过socket发送xml报文(当然也可以发送文本文件)
    		{
                string xmlstr = Read_from_file(filePathName);
                byte[] xmlBuffer = System.Text.Encoding.Unicode.GetBytes(xmlstr);  //Unicode编码
                
                try
                {
                    sock.BeginSend(xmlBuffer, 0, xmlBuffer.Length, SocketFlags.None,
                            new AsyncCallback(OnSendData), sock);
        			  return true;
                }
                catch (System.Exception ex)
                {
                    nLogInfo.Write("Failed!发送失败:" + filePathName+" "+ex.Message);
       				  return false;
                }
                
    		}

    下面的generatexml和send 都是再xmlcode class下的, 就是上面的xc;

    生成的xml文件发不出去而且还阻塞的信道。。。


    2012年4月25日 1:19

全部回复

  • 各位大大,急求解决!
    2012年4月25日 8:01
  • 没有人知道错误在哪吗?, 可能出错的地方也没人知道吗?

    急求解答!!今天最后一天

    2012年4月26日 1:17
  • 你好,

    根据你目前提供的代码并没有发现什么问题,能否提供一些其他的信息呢,说不定问题出在别的地方。

    2012年4月26日 7:30
  • 我觉得应该不是他引起的,你把generate_xml注释掉看看

    http://feiyun0112.cnblogs.com/

    2012年4月26日 8:30
    版主
  • 		public string Read_from_file(string fileName)  //从文件读取到string
    		{
                try
                {
                    StreamReader sr = new StreamReader(fileName);
                    string xmlstr = "";
                    xmlstr = sr.ReadToEnd();
                    sr.Close();
                    return xmlstr;
                }
                catch (System.Exception ex)
                {
                    nLogInfo.Write("Failed!读取文件" + fileName + "失败 " + ex.Message);
                    return "";
                }
    			
    		}
    这是之前code 里面的

    Read_from_file

    我现在发现有趣的问题。同样的xml文件但是内容部一样,同样调用send_xml命令就可以发出去。

    后来我把现在generate_cmdXml里面加了一些没用的项以后就可以发出去了,但是程序用了两天以后又出现原来可以发出去的xml文件现在变的不能发出去了。

    而且状况和之前的一样,所有信息显示socket的都是连接的,但是就是发不出去东西,感觉就像是信道堵塞在中间了一样。

    难道说xml文件里面的东西还会影响通信?。

    2012年4月28日 6:10
  • 		public string Read_from_file(string fileName)  //从文件读取到string
    		{
                try
                {
                    StreamReader sr = new StreamReader(fileName);
                    string xmlstr = "";
                    xmlstr = sr.ReadToEnd();
                    sr.Close();
                    return xmlstr;
                }
                catch (System.Exception ex)
                {
                    nLogInfo.Write("Failed!读取文件" + fileName + "失败 " + ex.Message);
                    return "";
                }
    			
    		}
    这是之前code 里面的

    Read_from_file

    我现在发现有趣的问题。同样的xml文件但是内容部一样,同样调用send_xml命令就可以发出去。

    后来我把现在generate_cmdXml里面加了一些没用的项以后就可以发出去了,但是程序用了两天以后又出现原来可以发出去的xml文件现在变的不能发出去了。

    而且状况和之前的一样,所有信息显示socket的都是连接的,但是就是发不出去东西,感觉就像是信道堵塞在中间了一样。

    难道说xml文件里面的东西还会影响通信?。

    2012年4月28日 6:11