하나의 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가 소켓이 닫힌다고 말하는지 알지 못한다.
감사에 대한 선언이 누락되어 있지만,이 코드가 무엇을 "버퍼"는 무엇입니까? 또한 출력 스트림을 마지막으로 닫지 않고도 읽을 수 없습니다. 이것도 소켓을 닫을 수 있습니까? – Sixtoo
나는 그것이 소켓을 닫을뿐 아니라 솔루션이 Socket.shutdownOutput()을 사용한다는 것을 안다. – Sixtoo
** 편집 ** 정말 해결책이 아니다. 그 후에는 outputstream을 재사용 할 수 없다. – Sixtoo