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

关于socket通信有关问题,为什么这段程序会有有关问题

2012-02-23 
关于socket通信问题,为什么这段程序会有问题自己建立的sys类publicstaticNetworkStreamnsnullpublicstat

关于socket通信问题,为什么这段程序会有问题
自己建立的sys类

                public   static   NetworkStream   ns   =   null;
                public   static   StreamReader   sr   =   null;
                public   static   TcpClient   clientsocket   =   null;
               
                ///   <summary>
                ///   向服务器发起SOCKET请求
                ///   </summary>
                ///   <param   name= "import "> 发起的请求字符串 </param>
                ///   <returns> 返回服务器结果 </returns>
                public   static   string   sendSoket(string   import)
                {
                        string   sendSoket_   =   " ";
                        try
                        {
                                Byte[]   outbytes   =   Encoding.GetEncoding( "GB2312 ").GetBytes(import.ToCharArray());
                                sys.ns.Write(outbytes,   0,   outbytes.Length);  
                                string   serverresponse   =   " ";
                                serverresponse   =   sys.sr.ReadLine();
                                sendSoket_   =   serverresponse.Trim();
                        }
                        catch   (Exception   ex)
                        {
                                sendSoket_   =   "Exc| "   +   ex.ToString();
                        }
                        return   sendSoket_;
                }

为什么软件会死掉,这个程序有什么问题吗?


[解决办法]
这一段好像不会导致死机。
[解决办法]
是否因为TcpClient、NetworkStream是同步方式通信的?通信对方不响应的话自然会被阻塞掉。而如果恰好你这段程序在主线程中执行,这个软件就没响应了。
如果要在其它线程中读写NetworkStream中的内容,考虑使用 BeginWrite 和 EndWrite,如果要异步传输只能抛弃TcpClient了……
------解决方案--------------------


问题可能有两个:1、Socket没有接收到数据。
2、对方发送过来的数据中没有换行符!
[解决办法]
因为你在ReadLine(); 没有收到返回消息,阻塞了。
[解决办法]
dreamw(网卡) ( ) 信誉:100 2007-08-25 15:25:13 得分: 0


没有换行符???


-----------------------------
是的,ReadLine方法要读取到一个换行符才会返回。

热点排行