이 예제는 Java 구현 클라이언트의 특정 코드를 공유하여 참조를 위해 서버로 파일을 보내도록합니다. 특정 내용은 다음과 같습니다
서버 소스 코드 :
import java.io.bufferedReader; import java.io.file; import java.io.filenotfoundException; import java.io.fileoutputStream; import java.io.ioexception; import java.io.inputStreamReader; import java.net.serversocket; import java.net.socket; /*** 이름 : ServerReceive.java* 구현 함수 : 서버로서 클라이언트가 보낸 파일을 수신합니다** 1.* 1. 소켓 서버를 설정하고 클라이언트가 연결할 때까지 기다립니다.* 2. 클라이언트 연결이있는 경우 두 당사자 간의 계약에 따라 클라이언트가 보낼 수 있도록 파일 이름과 파일 크기 정보를 작성해야합니다. 4. 루프에서 데이터 패킷을 받고 파일에 데이터 패킷을 수신하고 파일 * 5에 데이터 패킷을 작성합니다. 수신 된 데이터의 길이가 파일에 의해 전송 된 파일의 길이와 같으면 파일이 수신되고 파일이 닫혀 있음을 의미합니다. * 6. 파일 수신 작업은 * * * * [참고 :이 코드는 각각의 포장 전환기에만 사용되며, 서버 전송이 없음. 유출은 자신의 프로그램에 따라 자체적으로 배치 할 수 있습니다] * * * 저자 : Xiaoqiu * 생성 시간 : 2014-08-19 * * */ public class serverReceive {public static void main (String [] args) {/ ** 통신 핸들 서버와의 연결을 설정하기 위해 */ serversocket ss = null; 소켓 s = null; / ** 파일 개체 정의 및 파일 출력 스트림 수신 후 로컬로 생성 된 개체*/ 파일 파일 = null; fileoutputStream fos = null; / ** 입력 스트림을 정의하고 소켓 입력 스트림을 사용하여 패킷을 입력*/ inputStream is = null; / ** 패킷에 대한 저장 패킷으로 제공되도록 바이트 배열을 정의하십시오*/ byte [] buffer = new Byte [4096*5]; / ** 파일 보내기 요청을받는 데 사용되는 stand string*/ String comm = null; / ** SOCEKT 통신을 설정하고 서버가 연결 될 때까지 대기*/ try {SS = New Serversocket (4004); s = ss.accept (); } catch (ioexception e) {e.printstacktrace (); } / ** 클라이언트 라인이 보낸 규칙 정보를 읽으십시오* / try {inputStreamReader isr = new inputStreamReader (s.getInputStream ()); bufferedReader br = 새로운 버퍼드 리더 (ISR); comm = br.readline (); } catch (ioexception e) {System.out.println ( "서버가 클라이언트에서 분리"); }/** 클라이언트가 보낸 요청 명령을 구문 분석 시작*/int index = comm.indexof ( "/#"); / ** 프로토콜이 파일을 보내는 프로토콜인지 논의하십시오*/ string xieyi = comm.substring (0, index); if (! xieyi.equals ( "111")) {System.out.println ( "서버에서받은 프로토콜 코드가 잘못되었습니다"); 반품; } / ** 파일의 이름과 크기를 구문 분석* / comm = comm.substring (index + 2); index = comm.indexof ( "/#"); 문자열 filename = comm.substring (0, index) .trim (); 문자열 파일 크기 = comm.substring (index + 2) .trim (); / ** 파일을 수신하려면 빈 파일을 만듭니다*/ file = 새 파일 (filename); if (! file.exists ()) {try {file.createnewfile (); } catch (ioexception e) {System.out.println ( "서버 측 파일 생성 실패"); }} else { / ** 당신은 또한* / system.out.println을 덮어 쓰는 지 물어볼 수 있습니다 ( "이 경로에 이미 동일한 파일이 존재합니다."); } / ** [위는 클라이언트 코드에 작성된 서버의 준비된 부분입니다]* / / ***서버가 파일을 수신 할 수있는 키 코드* / try { / ** 파일 출력 스트림 객체로 파일을 랩핑* / fos = new FileoutputStream (file); long file_size = long.parselong (filesize); is = s.getInputStream (); / ** 크기는 각각의 수신 된 패킷의 길이*/ int size = 0; / ** 카운트는 수신 된 파일의 길이를 기록하는 데 사용됩니다*/ long count = 0; / ** while loop*/ while (count <file_size) {/ ** 입력 스트림에서 패킷을 읽습니다*/ size = is.read (buffer); / ** 방금 읽은 패킷을 로컬 파일*/ fos.write (버퍼, 0, size)에 쓰십시오. fos.flush (); / ** 수신 된 파일의 길이 +size*/ count += size; System.out.println ( "서버는 패킷을 받았으며 크기는" + size입니다); }} catch (filenotfoundException e) {System.out.println ( "서버가 파일을 작성하지 못했다"); } catch (ioexception e) {System.out.println ( "서버 : 클라이언트 연결 끊김"); } 마지막으로 { / *** 열린 파일을 닫습니다* 필요한 경우 여기에 소켓 연결을 닫을 수도 있습니다.* / try {if (fos! = null) fos.close (); } catch (ioexception e) {e.printstacktrace (); } // catch (ioexception e)} // minade} // public static void main (String [] args)} // public class serverreceive클라이언트 소스 코드 :
import java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.ioexception; import java.io.outputStream; import java.io.printstream; import java.net.socket; /** * * * 파일 이름 : ClientsEnd.java * 구현 함수 : 클라이언트로 서버로 파일을 보내십시오 * * 특정 구현 프로세스 : * 1. 서버와의 연결 설정, IP : PORT : 4004 * 2. 사용자 정의 파일 전송 프로토콜을 통해 파일 이름과 크기를 서버로 보내고 파일을 읽으십시오. 클라이언트와 서버 간의 파일 전송을 보여주는 데만 사용됩니다. * 각 데이터 패킷 전에 파일 프로토콜 명령이 없습니다. * 특정 프로토콜 전송 및 파일 발신 사용 단계는 자신의 프로그램에 따라 배치 될 수 있습니다.] * * * 저자 : 초보자 * 작성 시간 : 2014-08-19 * * */ public class clientend {public static void main (String [] args) {/ ** 서버와의 연결을 설정하기위한 통신 핸들 */ ** 통신 핸들; /** 파일 객체를 정의합니다. / ** 파일 입력 스트림을 정의하여 열릴 파일을 열고 읽습니다. / ** 데이터 패킷의 스토리지 패킷으로 사용할 바이트 배열을 정의하십시오*/ byte [] buffer = new Byte [4096*5]; / ** 출력 스트림을 정의하고 소켓의 출력 스트림을 사용하여 패킷을 출력*/ outputStream os = null; / ** 전송 될 파일이 존재하는지 확인*/ if (! sendfile.exists ()) {System.out.println ( "클라이언트 : 전송 될 파일이 존재하지 않습니다"); 반품; } / ** 서버와 연결을 만듭니다* / try {S = 새 소켓 ( "127.0.0.1", 4004); } catch (ioException e) {System.out.println ( "서버에 연결되지 않음"); } / ** 파일 크기를 추출 할 수 있도록 파일 객체로 FIS 객체를 초기화* / try {fis = new FileInputStream (sendfile); } catch (filenotfoundException e1) {e1.printstacktrace (); } /** 먼저 먼저 파일에 대한 정보를 서버로 보내기 위해 서버가 관련 준비를 수신 할 수 있도록하십시오.*특정 준비에 대해서는 서버 코드를 확인하십시오. * * 전송 된 내용에는 다음이 포함됩니다 : 파일 프로토콜 코드 보내기 (여기서는 111)/#파일 이름 (접미사 이름)/#파일 크기 * */try {printstream ps = new PrintStream (s.getoutOutputStream ()); ps.println ( "111/#" + sendfile.getname () + "/#" + fis.available ()); ps.flush (); } catch (ioException e) {System.out.println ( "서버 연결 인터럽트"); } / *** 서버가 관련 작업을 준비하기 위해 2 초 동안 여기서 잠을 자십시오. } catch (InterruptedException e1) {e1.printstacktrace (); } / ** 이전 준비 작업이 완료된 후*다음은 파일 전송의 키 코드입니다** / Try { / ** 소켓의 출력 스트림을 가져와 패킷을 작성하십시오* / os = S.GetOutputStream (); / ** 크기는 각 파일의 크기를 기록하는 데 사용됩니다*/ int size = 0; / ** 파일이 완성 될 때까지 while 루프를 사용하여 파일을 읽습니다*/ while ((size = fis.read (buffer))! = -1) {System.out.println ( "클라이언트는 패킷을 보냅니다. 크기는" + size); / ** 방금 읽은 패킷을 출력 스트림에 작성*/ os.write (버퍼, 0, 크기); / ** 새로 고침*/ os.flush (); }} catch (filenotfoundException e) {System.out.println ( "클라이언트 읽기 파일 오류"); } catch (ioException e) {System.out.println ( "클라이언트 출력 파일 오류"); } 마지막으로 { / *** 열린 파일을 닫습니다* 필요한 경우 여기에 소켓 연결을 닫을 수도 있습니다.* / try {if (fis! = null) fis.close (); } catch (ioException e) {System.out.println ( "클라이언트 파일 폐쇄 오류"); } // catch (ioexception e)} // minade} // public static void main (String [] args)} // public class clientsend위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.