0

我需要您的帮助,我尝试创建客户端-服务器应用程序。客户端是安卓手机,服务器是PC(C#)。我想要实时(尽可能)传输相机预览。我想我必须在 C# UDP 和 java DatagramSocket 中使用。我添加了从相机获取预览的功能,我尝试将字节数组发送到服务器,但它不起作用。也许你对我有一些解决方案,这是我的代码

 private Camera.PreviewCallback mPrevCallback = new Camera.PreviewCallback() 
    {
            public void onPreviewFrame( byte[] data, Camera Cam ) {
                    Log.e("CombineTestActivity", "Preview started");
                    Log.e("CombineTestActivity", "Data length = " 
                            + data.length );                   
                    try
                    {
                       InetAddress serverAddr = null;
                    try {
                        serverAddr = InetAddress.getByName("192.168.0.102");
                    } catch (UnknownHostException e) {

                        e.printStackTrace();
                    }
                    DatagramPacket packet = new DatagramPacket(data, data.length, serverAddr, 9050);
                    updatetrack("Client: Sending '" + new String(data) + "'\n");
                    Log.e("Client ", "C: Sending");
                  try {
                        socket.send(packet);
                    } catch (IOException e) {

                        e.printStackTrace();
                    }                  

            }
    };
4

1 回答 1

1

这个问题非常非常复杂,并不像它自己呈现的那么简单。让我指出一些可能对您有帮助的事情:

  • 阅读 UDP 与 TCP 的区别。考虑到您发送的数据量,我建议使用 UDP。但是请注意,UDP 不会尝试恢复在网络传输中丢失的任何数据。

  • 如果我没记错的话,一个是小端,另一个是大端。考虑到您的数据是纯字节,您需要更正正在接收的字节顺序(如果我错了,请纠正我)。这本身就是一个完整的话题。

  • 考虑其他替代方案,例如 Node.js,它为您包装了很多东西,这样您就不必处理它们会造成最大麻烦的套接字,至少在服务器端是这样。我之前没用过Node.js,但是它看起来是一个很好用的库,可以为你省去很多麻烦。如果您以前从未进行过套接字编程,那么如果您不知道自己在做什么,那简直就是地狱;特别是如果您想处理多个连接。

  • 它基本上归结为两端快乐并且能够正确地相互交谈。我不确定您是否已经拥有服务器,但最大的挑战将是他们如何正确地相互交谈。您必须让服务器确切地知道会发生什么,特别是如果您要发送的数据不仅仅是图像数据。

我希望这有帮助!

于 2013-10-26T01:06:47.087 回答