日期:2014-05-17  浏览次数:21431 次

c#接受tcp数据 急急急
求助各位大侠 我做的接受tcp协议的数据 代码如下 
 IPAddress lacaladdr = IPAddress.Parse("127.0.0.1");
            int port = Int32.Parse("9086");//本地待侦听端口 
           TcpListener tcpListener = new TcpListener(port);//创建TcpListener对象实例 
           tcpListener.Start();
           TcpClient tcpclient = tcpListener.AcceptTcpClient();
           NetworkStream ns = tcpclient.GetStream();
            StreamReader sr=new StreamReader(ns);
            string reasult = sr.ReadToEnd();
            Invoke(new UpdateDisplayDelegate(UpdateDisplay),new object [] {reasult});
            tcpclient.Close();
            tcpListener.Stop();
为何能够建立连接 却无法接收数据 ?? 提示内容为:-sr.ReadToEnd() “sr.ReadToEnd()”引发了“System.IO.IOException”类型的异常 string {System.IO.IOException} base {"无法从传输连接中读取数据: 无法立即完成一个非阻止性套接字操作。。"} System.SystemException {System.IO.IOException}
c# tcp

------解决方案--------------------
TcpClient 不应该用ReadToEnd来读取,
------解决方案--------------------
用Read,TCP的流操作涉及流长度的都有问题
------解决方案--------------------
 TcpListener tcpListener = new TcpListener(port);这句好像要有IP地址吧
因为网络传输数据的时候数据是以比特流的方式传输的,所以传输和接收应该以比特流的读取方式读取或写:

if (ns.CanWrite)
{
    byte[] myWriteBuffer = Encoding.ASCII.GetBytes("hello");
    ns.Write(myWriteBuffer,0,myWriteBuffer.Length);
}

读取也差不多,MSDN上有写,这只是个人意见
------解决方案--------------------

    public abstract class PacketTransferBase
    {
        /// <summary>
        /// Socket列表
        /// </summary>
        public SortedList<int, Socket> SocketClientList { get; private set; }       

        public PacketTransferBase()
        {
            SocketClientList = new SortedList<int, Socket>();
        }

        /// <summary>
        /// 保存客户端,以待每次接收后进行判断等功能
        /// </summary>
        /// <param name="socketClient"></param>