2011-04-24 6 views
2

서버에 파일을 보내고 서버에 다른 값을 보내는 클라이언트가 있습니다. 파일을 전송할 수 있었지만 소켓을 닫을 때까지 열리지 않았습니다. 클라이언트 측에서 또 다른 소켓을 만들었지 만, 서버가 다른 클라이언트 인 것처럼 그것을 읽고 클라이언트 번호를 증가시키고 나에게 예외를 주었다.> Socketexception : 소프트웨어로 인해 연결이 끊어짐 : 소켓 쓰기 오류. 여기 새 소켓을 가진 클라이언트 쪽의 코드입니다. 아무에게도 도움이 될 수 있습니까? 미리 감사드립니다.클라이언트가 서버에 파일을 보낼 새 소켓

try 
{ 
    Socket sendSock=new Socket("localhost", 8080); 
    outC.println("AcceptFile,"); 
    FileInputStream fis = new FileInputStream(p); 
    byte[] buffer = new byte[fis.available()]; 
    fis.read(buffer); 
    ObjectOutputStream oos = new ObjectOutputStream(sendSock.getOutputStream()) ; 
    oos.writeObject(buffer); 
    sendSock.close(); 
} 
catch(Exception c) 
{ 
    System.err.println("exc" + c); 
} 

답변

0

여러 연결을 지원할 때의 문제는 서버 측에서 발생합니다. 클라이언트 측에서 서버 비헤이비어를 어떻게 해결할 지 모르겠습니다. 하나의 세션에서 다중 연결을 지원하지 않습니다.

+0

할 수 있습니다. –

1

tl; dr - 새 소켓을 만들지 마십시오. 출력 스트림을 랩핑하고 객체를 보내면됩니다.

가정 OUTC은 또한 당신의 서버에 연결하고,이

outC.println("AcceptFile,"); 
FileInputStream fis = new FileInputStream(p); 
byte[] buffer = new byte[fis.available()]; 
fis.read(buffer); 
ObjectOutputStream oos = new ObjectOutputStream(originalSocket.getOutputStream()); 
oos.writeObject(buffer); 

이 기본이되는 스트림에 객체를 작성합니다 않습니다.

이제 서버 측에서, 당신은 내가 파일을 작성 후 소켓을 닫아야합니다 것을 발견하기 때문에 그냥 솔루션의 생각이

if(clientMessage.equals("AcceptFile,")) { 
    ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream()); 
    byte[] buffer = (byte[])ois.readObject(); 
    // do what you will with that 
} 
+0

@glowcoder 귀하의 게시물을 가져 주셔서 감사합니다,하지만 전이 코드를 사용하고 파일을 올바르게 전송하지만 소켓을 닫지 않으면 파일이 열리지 않습니다, 내 문제입니다. –

+0

@Fatema "파일이 열리지 않았다"는 것은 무엇을 의미합니까? 소켓을 통해'byte [] '를 보냈습니다. 나는 당신이 그 파일에'byte []'를 쓰고 그 방법으로 작업 할 것이라고 기대하고있다. (또는 그냥'byte [] '로 작업한다.) 당신이 의미하는 것을 더 자세히 설명해 주시겠습니까? "파일이 열리지 않았습니까?" – corsiKa

+0

@glowcoder 나는 파일이 예를 들어 (source.pdf) 만들어 졌음을 의미하지만 서버 - 클라이언트 응용 프로그램이 실행 중일 때 파일을 열려고하면 pdf 판독기 프로그램이 파일을 읽을 수 없다는 메시지를 표시합니다.하지만 내가 응용 프로그램을 닫고 파일을 열려고하면 제대로 읽습니다. –

관련 문제