在SOCKET传输数组中,我把DATASAT序列后传送,但是如果我的DATASAT序列号后的字节大于接受端得缓存byte[],该怎么处理比较好。

解决方案 »

  1.   

    如果太大, byte[]不够的话,即时转储到steam
      

  2.   

    道理上就是用更大的容器去装,比如用MemoryStream
     System.IO.MemoryStream stream=new System.IO.MemoryStream();   
      stream.Write(bytes, 0, bytes.Length );   
      stream.Close(); 比如缓冲是100字节下一次偏移量就是100
      stream.Write(bytes, 100, bytes.Length );   
      

  3.   

    你把接收端的byte搞大了不就行了。
    你发送多大数据不够用啊?
    大于tcp的一帧?
      

  4.   

    你用socket的话,那先Receive()到缓冲长度 的数据以后,把他放进MemoryStream里面去,这样就行了,
    然后反序列化MemoryStream里面的数据.
      

  5.   

    所以你要用长度不固定的stream来接收,每次通过Receive()得到的数据,写到stream里面去.
      

  6.   

    client:        private IPAddress GetServerIP(string ip)
            {
                IPHostEntry tempHost = new IPHostEntry();
                tempHost = Dns.Resolve(ip);
                if (tempHost.AddressList.Length == 1)
                {
                    return tempHost.AddressList[0];
                }
                else
                {
                    return tempHost.AddressList[1];
                }
            }        private void clientListen()
            {
                try
                {
                    if (!base.IsDisposed)
                    {
                        serverDnsName = textBox3.Text.Trim().ToUpper().Replace("TCP://", "");
                        serverPort = int.Parse(textBox4.Text.Trim());
                        IPHostEntry resolvedServer = Dns.GetHostEntry(serverDnsName);
                        //for (int i = 0; i < resolvedServer.AddressList.Length; i++)
                        //{
                            IPAddress address = GetServerIP(serverDnsName);
                            //IPAddress address = resolvedServer.AddressList[i];
                            IPEndPoint serverEndPoint = new IPEndPoint(address, serverPort);
                            Socket tcpSocket = new Socket(address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                            try
                            {
                                tcpSocket.Connect(serverEndPoint);
                                StreamWriter writer = null;
                                StreamReader reader = null;
                                try
                                {
                                    NetworkStream networkStream = new NetworkStream(tcpSocket);
                                    writer = new StreamWriter(networkStream);
                                    clientMessage = textBox1.Text + ":" + Dns.GetHostName() + ":已连接";
                                    writer.WriteLine(clientMessage);
                                    writer.Flush();
                                    reader = new StreamReader(networkStream);
                                    string serverMessage = reader.ReadLine();
                                }
                                catch (SocketException ex)
                                {
                                    MessageBox.Show(string.Format("Socket处理失败:{0}", ex.Message
                                }
                                catch (IOException ex)
                                {
                                    MessageBox.Show(string.Format("IO处理失败:{0}", ex.Message
                                }
                                finally
                                {
                                    if (reader != null)
                                        reader.Close();
                                    if (writer != null)
                                        writer.Close();
                                }
                                //break;
                            }
                            catch (SocketException)
                            {
                                serverConnectionString = "";
                                if (tcpSocket != null)
                                    tcpSocket.Close();
                                if (i == resolvedServer.AddressList.Length - 1)
                                    MessageBox.Show("TCP连接失败!");
                            }
                        }
                    //}
                }
                catch (SocketException ex)
                {
                    MessageBox.Show(string.Format("不能解析服务器DNS名称:{0}", ex.Message
                }
            }
    Server:        private void StartServices()
            {
                IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, serverPort);
                Socket serverSocket = new Socket(localEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                try
                {
                    serverSocket.Bind(localEndPoint);
                    serverSocket.Listen(int.MaxValue);                while (serverServices)
                    {
                        try
                        {
                            Socket clientSocket = serverSocket.Accept();                        StreamReader reader = null;
                            StreamWriter writer = null;
                            try
                            {
                                NetworkStream networkStream = new NetworkStream(clientSocket);
                                reader = new StreamReader(networkStream);
                                string clientMessage = reader.ReadLine();
                                writer = new StreamWriter(networkStream);
                                writer.WriteLine(serverMessage);
                                writer.Flush();
                            }
                            catch (SocketException ex)
                            {
                                MessageBox.Show(string.Format("消息处理失败:{0}", ex.Message));
                            }
                            finally
                            {
                                if (reader != null)
                                    reader.Close();
                                if (writer != null)
                                    writer.Close();
                            }
                        }
                        catch (SocketException ex)
                        {
                            MessageBox.Show(string.Format("服务器拒绝连接:{0}", ex.Message));
                        }
                    }
                }
                catch (SocketException ex)
                {
                    MessageBox.Show(string.Format("服务器启动失败:{0}", ex.Message));
                }
                finally
                {
                    if (serverSocket != null)
                    {
                        serverSocket.Close();
                    }
                }
            }
      

  7.   

    分包发送 设置buffer不是解决的方法 当是的dataset不段的变大 你不可能无限的加大buffer
    byte[4]+byte[4]+byte[4]+byte[data]
    /包编号/一共多少个包/目前第几个包/真实数据
    大概的是这样。。
    接收后按你的协议在去组包