2016-09-07 85 views
0

我已经发送了一个字符串和图像从Java Android到C#服务器。但我有一个整数数组的问题。从java android客户端发送大型int []数组到c#服务器

for循环(客户端)中使用dataOutputStream.writeByte(Array[i])是否是一种很好的逻辑?

我测试过的只有6个元素的小数组。在服务器中,数组元素被接收但与客户端数组中的数字不同。这是为什么?

OUTPUT:

client array : (1,3333,50,6,7,8} 
server array : {37, 37, 9, 45, 18, 18}!! 

客户端Android版:

public void ConnectToServer() 
{ 
    //generate array with random numbers 
    int[] array = {1,333,5,60,7,8}; 

    try { 

     //Connect to socket 
     Socket socket = new Socket(HOST, PORT); 
     DataOutputStream outToServer = new DataOutputStream(socket.getOutputStream()); 
     for(int i=0; i< 6; i++) 
     { outToServer.writeByte(array[i]);} 

     outToServer.flush(); 
     socket.shutdownOutput(); 
     Log.e("MESSAGE", "array sent Successfully"); 

     //receive msg from (server) 
BufferedReader r = new BufferedReader(new  InputStreamReader(socket.getInputStream())); //for reading response from server 
     recievedMsg = r.readLine(); 

     //clean 
     r.close(); 
     socket.close(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

} 

服务器:

static void Main(string[] args) 
     { 
      try 
      { 
       IPAddress ipAdress = IPAddress.Parse("192.168.10.3");client 
       TcpListener listener = new TcpListener(ipAdress, 4003); 
       listener.Start(); 

       Console.WriteLine("Server Waiting for connections..."); 
       Socket s = listener.AcceptSocket(); 
       // When accepted 
       NetworkStream nstm = new NetworkStream(s); 
       BinaryReader reader = new BinaryReader(nstm); 
       byte result; 
       int number; 

       for (int i = 0; i < 6; i++) 
       { result = reader.ReadByte(); 
        number = Convert.ToInt32(result); 
        Console.WriteLine(number.ToString() + "---"+ i); 
       } 

       //send the response to client 
       Byte[] sendData = Encoding.ASCII.GetBytes("received !"); 
       nstm.Write(sendData, 0, sendData.Length); 
        //Clean up 
        s.Close(); 
        listener.Stop(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Error.....CL1 " + e.Message + e.StackTrace); 
      } 
     } 

回答

0

的Java使用大端,和C#中使用小尾数。

+0

那么,我该如何处理? –

+0

@ k-s -b change'{outToServer.writeByte(array [i]);}'to'{outToServer.writeInt(array [i]);}'。并可能需要Trun字节从大端到小端在您的服务器 –

+0

确定在客户端如果我写了'outToServer.WriteByte(array [i])'并在服务器'int number = binaryReader.readInt16()'结果接收正确发送除了3333收到5 ???为什么? –

相关问题