客户端 send第一次   比如send个用户名
 客户端再send第二次  send个密码 服务端  receive第一次 
         receive第二次
 服务端第一次接收到的一定是客户端第一次send的内容么  即用户名
 
 难道不会receive一下 把客户端俩次send的内容 即把用户名和密码都给接收完了?
 
 
 

解决方案 »

  1.   

    记住socket的机制:客户端send一次,服务端receive一次。
      

  2.   

    客户端send一次了以后 服务器端不reiceive难道程序中的第二个send就不执行吗
      

  3.   

    第二个send,服务端就receive第二次。
      

  4.   

    我从send的字节里面 取字符串 夹杂好多\0 比如我send个字符串 user
    encoding.default.getbytes("user")
    receive完 encoidng.default.getstring(bytes)
    返回个字符串 u\0\s\0\e\0r\0
    为啥出现这些\0啊 怎么去掉呢  又不能trim掉 replace(string,'')也不行 第二个参数不能为空char
      

  5.   

    byte[] bytes = Encoding.GetEncoding("utf-8").GetBytes("user");
    string result = Encoding.GetEncoding("utf-8").GetString(bytes);
    //两边编码要统一
      

  6.   

    不对的  这是客户端的代码
        // 给服务器发送要传送的文件名
                        byte[] filenameByte = new byte[256];
                        filenameByte = Encoding.Default.GetBytes(fileName);
                                            netStream.Write(filenameByte, 0, filenameByte.Length);
                        netStream.Flush();
                        // 给服务器传送需要文件发送的次数
                        //netStream.Write(Encoding.Unicode.GetBytes(times_tobesended.ToString()), 0, Encoding.Unicode.GetBytes(times_tobesended.ToString()).Length);
                        // 给服务器发送总的文件大小
                        byte[] tempb = Encoding.Default.GetBytes(fileSize.ToString());                    netStream.Write(Encoding.Default.GetBytes(fileSize.ToString()), 0, Encoding.Default.GetBytes(fileSize.ToString()).Length);
                        netStream.Flush();  这是服务器端接收的代码      byte[] fileBuffer = new byte[fileBuffer_eachTime_sended];
                                            byte[] fileNameBuffer = new byte[256];
                                            // 接收文件名 
                                            clientSocket.Receive(fileNameBuffer);
                                            string fileName = Encoding.Default.GetString(fileNameBuffer).TrimEnd('\0');
                                            //// 接收要传送的次数
                                            //byte[] times_byte = new byte[8];
                                            //clientSocket.Receive(times_byte);
                                            //string temp = Encoding.Default.GetString(times_byte).TrimEnd('\0');
                                            //int number_of_receive = int.Parse(temp);
                                            // 接收总的文件大小
                                            byte[] fileSize_byte = new byte[16];
                                            clientSocket.Receive(fileSize_byte);
                                            string fileSize_string = Encoding.Default.GetString(fileSize_byte).TrimEnd('\0');
                                            long sumFileSize = Convert.ToInt32(fileSize_string, 10);
    最后一行会报错 
    而且string fileName = Encoding.Default.GetString(fileNameBuffer).TrimEnd('\0');
    filename的取到的值为"示例图片_02.jpg123777??JFIF"
    123777 的确是图片的大小  是不是说它确实读了 俩次发送的流  还是networkstream.write的机制有问题啊