【发布时间】:2016-04-24 18:52:30
【问题描述】:
我正在尝试通过 TCP 套接字将实时麦克风录音传输到服务器,然后服务器将输入流写入文件。 连接已建立,但一段时间后,我的客户端出现连接被拒绝错误。
服务器代码:
public class auServer extends Thread{
private static ServerSocket serverSocket;
private static int port = 3333;
public void run()
{
System.out.println("init success");
while(true)
{
try
{
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(10000);
Socket clientSoc = serverSocket.accept();
System.out.println("Waiting for client on port " +serverSocket.getLocalPort() + "...");
System.out.println("Just connected to " + clientSoc.getRemoteSocketAddress());
InputStream in = clientSoc.getInputStream();
while(in!=null)
{
writeToFile(in);
}
System.out.println("socket");
clientSoc.close();
}catch(SocketTimeoutException s)
{
System.out.println("Socket timed out!");
break;
}catch(IOException e)
{
e.printStackTrace();
System.out.println("some io");
break;
} catch (Exception e) {
System.out.println("some e");
e.printStackTrace();
}
}
}
private void writeToFile(InputStream in) throws IOException {
// Write the output audio in byte
String filePath = "8k16bitMono1.wav";
short sData[] = new short[1024];
byte[] bData = IOUtils.toByteArray(in);
FileOutputStream os = null;
try {
os = new FileOutputStream(filePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("Short wirting to file" + sData.toString());
try {
os.write(bData, 0, 2048);
} catch (IOException e) {
e.printStackTrace();
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
Thread serverThread = new auServer();
serverThread.run();
System.out.println("runing");
}catch(IOException e){
e.printStackTrace();
}
}
}
和客户:
private void streamData(byte[] bData) throws UnknownHostException, IOException, InterruptedException { //bData is byte array to transmit
Thread.sleep(500);
Socket client = new Socket("10.221.40.41",3333);
OutputStream outToServer = client.getOutputStream();
outToServer.write(bData);
if(!isRecording)
client.close();
}
可能是什么问题? 提前致谢。
【问题讨论】:
-
有什么例外吗?请阅读一些“阻塞网络 I/O 教程”。代码存在多个问题。
-
“试图传输实时麦克风录音”——你对“实时”的定义是什么?
-
'streamData(byte[] bData)' bData 有多少字节?您是在说一次 streamData() 调用吗?
-
为什么要为每条数据创建一个新的客户端?为什么服务器一次又一次地将这些片段写入同一个文件?该文件不会增长,但只包含一份。请说明您的想法。
-
os.write(bData, 0, 2048);。 2048 年?你确定吗?为什么?
标签: java android sockets tcp stream