我正在想一个程序 测试成功(我在发送之前我知道大小和格式才可以的) 现在面临问题是 在不知收到文件大小怎么来获取接受文件大小。我接受文件的方法如下private void AcceptMessage()
        {
            //d定义socket对象
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint iep = new IPEndPoint(IPAddress.Any, 8899);
              socket.Bind(iep);           
              ep = (EndPoint)iep;
              bytes = new byte[49153];   //怎么判断受到文件的大小  49153是我发送图片大小 在发送之前 我查看属性
              while (true)
               {
                socket.ReceiveFrom(bytes, ref ep);
                receiveData ="";
                receiveData = System.Text.Encoding.Unicode.GetString(bytes);
                receiveData = receiveData.TrimEnd('\u0000');
                Thread th = new Thread(new ThreadStart(Acc));
                th.Start();
               
               }
            
              socket.Close();
        }
       bytes = new byte[49153]; 就是这里不会写  怎么获取要接受文件的大小   还有怎么获取接受文件的格式
高手帮个帮  我实在不知道怎么弄,感谢万分。回复 定给分

解决方案 »

  1.   

    发送的时候不发送格式信息,接收方只能分析头数据.
    发送和接受如果都是自己写的程序,发送方最好把文件格式直接发给接受方.接收方可以判断EOF来确认是否已经把文件收完,但不可靠.
      

  2.   

    真正的通信程序架构需要一个实干家来搭建,而不是一个普通程序员。这种应用需要首先设计一个协议,并且实现清楚地知道自己到底要设计什么系统。例如你可以先参考古老而简陋的ftp协议来增强一下协议的感觉,例如:http://baike.baidu.com/view/1157060.htm
      

  3.   

    这个在tcp层上实现,你需要自己设计一个协议,协议里面包括文件长度字段,这样才能获取。问题是,为什么要重复造轮子。
      

  4.   

    recvfrom会返回值啊
    int recv=receivefrom()
    这样行吗?
      

  5.   

    还有
    通信协议是双方定的
    你可以要求客户机把通信规约制定成这种格式:
    数据大小(4字节)+格式(20字节)+文件
    在服务器端先读取前4字节
    recvfrom(data,4,ref)
    然后转byte为int
    得到大小
    在recvfrom(data,20,ref)
    得到格式,处理
    在recvfrom(data,size-24,ref)