2014-09-04 3 views
0

하나의 PC에서 보내기 버튼을 클릭하고 다른 PC에서 수신 버튼을 클릭하고 파일을 전송하는 GUI가 있습니다. 문제는 파일을 한 번만 보낼 수 있다는 것입니다. 그런 다음 앱을 다시 시작해야합니다.java - 한 번만 파일 보내기 가능

실패 이유는 다음과 같습니다. 보내는 PC에서 "소켓이 닫혀 있습니다"라고 표시되는 이유는 알 수 없지만. 수신 pc에 "ArrayIndexOutOfBounds"가 있습니다. 내가 닫고 다른 파일을 전송하기 전에 다시 작성하지만, OutputStream에 늘 두 번째로 쓰기 어떤 이유로

public void StreamIn() throws Exception {  //FOR RECEIVING FILES 

    byte[] mybytearray = new byte[size]; 
    InputStream is = sock.getInputStream(); 
    fos = new FileOutputStream(FILE_TO_RECEIVE); 
    bos = new BufferedOutputStream(fos); 
    bytesRead = is.read(mybytearray, 0, mybytearray.length); 
    current = bytesRead; 

    do { 
     bytesRead = is.read(mybytearray, current, (mybytearray.length - current)); 
     if (bytesRead >= 0) current += bytesRead; 
    } while (bytesRead > -1); 

    bos.write(mybytearray, 0, current); 
    bos.flush(); 

    if (fos != null) fos.close(); 
    if (bos != null) bos.close(); 
} 

public void StreamOut() throws Exception {  //FOR SENDING FILES 

    fis = new FileInputStream(myFile); 
    bis = new BufferedInputStream(fis); 
    bis.read(mybytearray, 0, mybytearray.length); 
    os = sock.getOutputStream(); 

    os.write(mybytearray, 0, mybytearray.length); 
    os.flush(); 

    if (bis != null) bis.close(); 
    if (os != null) os.close(); 
} 

:

나는 데이터를 전송하기 위해 사용하는 두 가지 방법을 가지고있다. 나는 왜 PC가 소켓이 닫힌다고 말하는지 알지 못한다.

답변

1

하나의 파일을 보낸 후에 소켓을 닫습니다. 다른 파일을 보내려면 다른 소켓을여십시오.

NB 사본 루프는 StreamOut(). 당신은 read() 버퍼를 채우고 있다고 가정하고, 당신은 또한 mybytearray 파일만큼 크다는 것을 가정하고있는 StreamIn()에서 정확하지만, 잘못, 당신은 그러므로 또한 파일 가정된다 크기 인 int.

에 자바 스트림을 복사 할 수있는 표준 방법을 맞는 : 두 가지 방법에

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

사용이.

flush()close()이 중복되기 전에.

또한 StreamOut()는 답변 mybytearray.

+0

감사에 대한 선언이 누락되어 있지만,이 코드가 무엇을 "버퍼"는 무엇입니까? 또한 출력 스트림을 마지막으로 닫지 않고도 읽을 수 없습니다. 이것도 소켓을 닫을 수 있습니까? – Sixtoo

+0

나는 그것이 소켓을 닫을뿐 아니라 솔루션이 Socket.shutdownOutput()을 사용한다는 것을 안다. – Sixtoo

+0

** 편집 ** 정말 해결책이 아니다. 그 후에는 outputstream을 재사용 할 수 없다. – Sixtoo

관련 문제