0

谁能给我一个关于如何将文件从 java 服务器发送到 c# 客户端以及从 c# 到 java 接收完整确认消息的小教程。实际上我是 C# 新手,不知道如何进行套接字编程。我被困在里面很久了。试了很多代码。一些代码收到不完整的文件,一些文件陷入无限循环。请在这方面帮助我。谢谢

编辑 这是我尝试过的:

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客户端:

        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();

    }
4

1 回答 1

0

服务器或客户端使用的语言之间没有依赖关系。

只是数据的结构很重要!

您应该搜索一些关于使用 C# 进行套接字编程的教程。例如: http: //www.codeproject.com/Articles/10649/An-Introduction-to-Socket-Programming-in-NET-using

但语言无关紧要,了解数据在网络上发送时的格式。

编辑:您应该在数据中添加一两个字节来指示它的长度。这并不是因为您一旦收到所有数据就没有数据可读取。

于 2012-07-23T07:52:38.837 回答