从单个客户端到服务器的多个不同数据类型的输入(JAVA)

时间:2017-06-23 11:53:06

标签: java android audio server client

美好的一天。

我发送一个用户名字符串(所以我知道以下文件属于哪个用户)然后是从android客户端到运行在java中的服务器的字节数组(用于音频)。 我想打开不同的端口,但因为服务器在专用网络中运行所以如果我想打开更多的端口,那么我需要添加更多的端口转发功能,这是非常愚蠢的。

我能够分别发送用户名和字节数组的字符串,但是当用户名后的音频文件时,音频文件将被加速。

server.java

while (true) {
            Socket socket = listener.accept();
            try {

                InputStream in = socket.getInputStream();
                BufferedReader inFileN = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                if (fileName==null) {
                    fileName=inFileN.readLine();
                    File dir = new File("/home/xxx/Documents/" + fileName);
                    dir.mkdirs();
                    }


                String filePath =  "/home/xxx/Documents/"+fileName+"/voice8K16bitmono.pcm";
                FileOutputStream os = null;
                byte[] buffer = new byte[1024];
                int count;

                try {
                    os = new FileOutputStream(filePath);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }

                while ((count = in.read(buffer)) > 0)
                {
                    os.write(buffer, 0, count);
                }

            } finally {
                socket.close();
            }

客户端用于写入用户名字符串

try {
        s = new Socket("localhost", 9090);
        PrintWriter out = new PrintWriter(s.getOutputStream(), true);
        out.print(userID);
        out.flush();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

客户端用于在某种情况下编写音频文件

try {
            s = new Socket("localhost", 9090);
            outToServer = s.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        while (isRecording) {
            recorder.read(sData, 0, BufferElements2Rec);
            detectSilence(sData, threshold);
            try {
                byte bData[] = short2byte(sData);
                //os.write(bData, 0, BufferElements2Rec * BytesPerElement);
                outToServer.write(bData, 0, BufferElements2Rec * BytesPerElement);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

或者,如果我想从单个客户端发送多种数据类型,还有其他更好的方法吗?

ps:我此时尚未实现多线程服务器,因为我想确保它首先适用于单个用户

谢谢。

0 个答案:

没有答案