用TcpListener 怎样实现客户端向服务端发送mp3文件?服务端怎么接收和保存这个mp3
用TcpListener 怎样发送一个对象,假如我在客户端创建了一个用户对象,包含了姓名,年龄等等的信息,怎样把这个对象发送的服务端上?怎样把文件读取成NetworkStream可以发送的流?
 

解决方案 »

  1.   

    1. 用TcpListener 怎样实现客户端向服务端发送mp3文件?服务端怎么接收和保存这个mp3 
    //在能够读取的字符串的总字节数大于BufferSize的时候会出现字符串截断现象,因为缓存中的数目总是有限的,而对于大对象,比如说图片或者其它文件来说,则必须采用“分次读取然后转存”这种方式
                    // "分次读取然后转存"的方式获取字符串
                    byte[] buffer = new byte[1024];
                  int bytesRead;          // 读取的字节数
                    MemoryStream msStream = new MemoryStream();
                    do
                    {   bytesRead = streamToClient.Read(buffer, 0, BufferSize);
                        msStream.Write(buffer, 0, bytesRead);
                    } while (bytesRead > 0);
                    buffer = msStream.GetBuffer();
                    string msg = Encoding.Unicode.GetString(buffer);
    这是在server接受数据的哈,在client端类似.
    2. 用TcpListener 怎样发送一个对象,假如我在客户端创建了一个用户对象,包含了姓名,年龄等等的信息,怎样把这个对象发送的服务端上? 
    由于TcpListener 发送的只是一种编码后的数据,不会考虑数据的具体什么内容,所以建议使用WCF的方式处理这个对象.如果实在想用这种方式的话,就要看这个对象的大小了,大的话类似上面,否则的话直接传送数据即可.
    3. 怎样把文件读取成NetworkStream可以发送的流? 
                string msg = "test send message";//这里可以是你读取的文件的信息.
              NetworkStream streamToServer = client.GetStream();
              byte[] buffer = Encoding.Unicode.GetBytes(msg); // 获得缓存,既是你说的把文件读取的信息转化为可以发送的流.
                streamToServer.Write(buffer, 0, buffer.Length); // 发往服务器
                Console.WriteLine("Sent: {0}", msg);如果楼主还是不清楚,请多看看基础知识.希望上面的对你有帮助.
      

  2.   

    看这个例子吧
    http://blog.csdn.net/lgg228tao/archive/2008/11/26/3378963.aspx
      

  3.   

    TcpListener 怎样发送一个对象 的话要将对象先序列化
      

  4.   

    如果要 包含用户名密码这样的东西,那么你在传输的时候肯定存在一个序列化的问题,可不可一定义一个struct 这个里面包含用户信息,在服务器也定义一个同样的struct 楼主试试能不能解决
      

  5.   

    qinhl99给的教程非常棒正是我要的,感谢liningln0详细的解答