2012-07-23 1 views
0

Может ли кто-нибудь дать мне небольшой учебник о том, как отправить файл с сервера java на C#-клиент и получить полное сообщение подтверждения от C# до java. На самом деле я новичок в C# и не знаю, как программировать сокеты. Я застрял в нем с тех пор. Пробовал много кодов. Некоторые коды получают неполные файлы, застрявшие в бесконечном цикле. Пожалуйста, помогите мне в этом. БлагодаряОтправить файл с Java на C# с помощью Socket

EDIT Вот что я пробовал:

C# Сервер:

{ 

      IPAddress ipAd = IPAddress.Parse("192.168.1.131"); 
      // use local m/c IP address, and 

      // use the same in the client 


      /* Initializes the Listener */ 
      TcpListener myList = new TcpListener(ipAd, 5600); 

      /* Start Listeneting at the specified port */ 
      myList.Start(); 

      Console.WriteLine("The server is running at port 5600..."); 
      Console.WriteLine("The local End point is :" + 
           myList.LocalEndpoint); 
      Console.WriteLine("Waiting for a connection....."); 
     m: 
      clientSock = myList.AcceptSocket(); 

      //clientSock.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,10000); 


      Console.WriteLine("Connection accepted from " + clientSock.RemoteEndPoint); 

      //byte[] b = new byte[100]; 
      //int k = clientSock.Receive(b); 
      string fileName = "hello.wav"; 


      NetworkStream networkStream = new NetworkStream(clientSock); 

      StreamReader sr = new StreamReader(networkStream); 

      //read file length 
      int length = int.Parse(sr.ReadLine()); 

      if (networkStream.CanRead) 
      { 
       BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + fileName, FileMode.Create)); 
       int receivedBytesLen = -1; 
       byte[] clientData = new byte[4096 * 5000]; 

       receivedBytesLen = networkStream.Read(clientData, 0, clientData.Length); 
       bWrite.Write(clientData, 0, receivedBytesLen); 

       do 
       { 
        receivedBytesLen = networkStream.Read(clientData, 0,clientData .Length); 
        bWrite.Write(clientData, 0, receivedBytesLen); 
       } while (receivedBytesLen > 0); 

       bWrite.Close(); 
       networkStream.Close(); 


      } 


      Console.WriteLine("Client:{0} connected & File {1} started received.", clientSock.RemoteEndPoint, fileName); 
      Console.WriteLine("File: {0} received & saved at path: {1}", fileName, receivedPath); 


      Recognizer_2 recognizeVoice = new Recognizer_2(clientSock); 
      recognizeVoice.recognize_wav(); // Acknowledgement 
      Console.WriteLine("\nResult Sent to the Client"); 
      goto m; 
     } 

Java Client:

 Socket socket = new Socket("192.168.1.131", 5600); 


     BufferedReader response_Stream = new BufferedReader(
       new InputStreamReader(socket.getInputStream())); 
     File f = new File(mFileName); 
     byte[] buffer = new byte[(int) f.length()]; 
     FileInputStream fis = new FileInputStream(f); 

     BufferedInputStream bis = new BufferedInputStream(fis); 


     bis.read(buffer, 0, buffer.length); 
     OutputStream outputStream = socket.getOutputStream(); 
     outputStream.write(buffer); 

     outputStream.flush(); 

     String final_Result_String = ""; 

     if (response_Stream != null) { 
      String respose_text = ""; 
      while ((respose_text = response_Stream.readLine()) != null) { 

       final_Result_String += respose_text; 

      } 

     } 

     Toast.makeText(getApplicationContext(), final_Result_String, 1) 
       .show(); 
     outputStream.close(); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } 
+0

socket означает почти ничего: какой протокол вы хотите использовать? Определено ли это, что-то обычное? –

+0

[Что вы пробовали?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) I.e. пожалуйста, покажите нам какой-то код, см. http://sscce.org/. –

+0

Я хочу использовать протокол TCP. –

ответ

0

Там нет пристройка между языками, используемых сервера или клиента.

Очень важна структура данных!

Вы должны найти несколько руководств по программированию сокетов с помощью C#. Например: http://www.codeproject.com/Articles/10649/An-Introduction-to-Socket-Programming-in-NET-using

Но язык не имеет значения, понять, как данные форматируются при отправке по сети.

Редактировать: вы должны добавить байт или два в данных, указывающих его длину. Это не потому, что у вас нет данных для чтения, как только все данные будут получены.

+0

спасибо. Но я застрял где-то в коде. Не удалось получить полный файл. –

+0

Возможно, вы не используете хороший тест, чтобы узнать, когда прекратить чтение. Доступных байтов в буфере недостаточно, добавьте длину к отправляемым данным. –

+0

Может быть ... Любое достойное решение у вас есть ??? Что я должен писать в состоянии цикла ??? –