我正在尝试使用Java从其他计算机将视频流式传输到服务器,对于初学者,我只是尝试使用原始套接字连接和字节流来传输文件。然而,事情并没有以同样的方式出现。如果我以这种方式传输文件,我的机器上的3MB文件最终在服务器上为5MB。我正在尝试使用视频文件,当我下载它时,生成的文件实际上是“播放”,并且长度正确,但没有图像。代码如下:
客户(流光):
public static void main(String[] args){
Socket sock = null;
try{
System.out.println("Connecting...");
sock = new Socket("server.com", 8080);
InputStream is = new FileInputStream(new File("Bear.wmv"));
byte[] bytes = new byte[1024];
OutputStream stream = sock.getOutputStream();
int count = is.read(bytes, 0, 1024);
while (count != -1){
stream.write(bytes, 0, 1024);
count = is.read(bytes, 0, 1024);
}
is.close();
stream.close();
sock.close();
}catch (Exception e){
e.printStackTrace();
}
}
服务器(接收方):
public static void main(String[] args){
ServerSocket sock = null;
try {
sock = new ServerSocket(8080);
} catch (IOException e) {
System.out.println("Could not instantiate socket:");
e.printStackTrace();
return;
}
Socket clientSock = null;
while(true){
try{
System.out.println("Waiting for connection...");
clientSock = sock.accept();
final Socket fin = clientSock;
System.out.println("Connection accepted");
System.out.println("Spawning thread...");
Thread trd = new Thread(new Runnable(){
public void run(){
try {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Receiving video...");
File video = new File("test.wmv");
FileOutputStream fos = new FileOutputStream(video);
byte[] data = new byte[1024];
int count = fin.getInputStream().read(data, 0, 1024);
while (count != -1){
fos.write(data, 0, 1024);
count = fin.getInputStream().read(data, 0, 1024);
}
fos.close();
fin.close();
System.out.println("Done receiving");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
});
trd.start();
}catch(IOException e){
System.out.println("Could not accept");
e.printStackTrace();
}
}
}
有什么想法?提前谢谢!
克里斯
答案 0 :(得分:4)
所以我想出了问题所在。
我将服务器更改为只写“count”字节
while (count != -1){
fos.write(data, 0, count);
count = fin.getInputStream().read(data, 0, 1024);
}
现在它有效:)
谢谢!