Este artigo compartilha o código específico do servidor de upload de arquivos java e cliente para sua referência. O conteúdo específico é o seguinte
Servidor de upload de arquivos:
/ *** Lado do servidor usando o protocolo TCP para implementar a função de upload* Ideias:* Crie um novo ServerSocket* Aguarde o cliente se conectar* Após a conexão, inicie o thread Child, passe o soquete obtido pela conexão com o thread Child* Looping mais novo (string @author yajun**/ public Uploadthread comando = new uploadThread (); server.start (comando); } /*** Função: Aceite a conexão, inicie o thread Child, loop* @param comando o objeto Thread Child Usado para baixar, que implementa a interface executável* /private void iniciante (comando uploadThread) {// Local Variable ServerSocketSocketSocket = null; Socket TransSocket; // lógica de negócios tente {serverSocket = new ServerSocket (55555); while (true) {System.out.println ("Aguarde a conexão ..."); transsocket = serversocket.accept (); int i = 0; i ++; System.out.println ("th"+i+"conexão"); // Você precisa fechar o tópico após o download? ? ? Command.SetSocket (transSocket); Executores.newfixedthreadpool (5) .Execute (comando); } // Exception Catch} Catch (ioException e) {e.printStackTrace (); // fechar recursos} finalmente {try {serversocket.close (); } catch (ioexception e) {e.printStackTrace (); }} // final de try} // Fim do Connect @test public void testConnect () {// Tarefa de teste: primeiro execute o lado do servidor e depois execute o cliente várias vezes. O segmento do servidor pode criar continuamente threads infantis e o teste é bem -sucedido // Preparação de teste: construa um thread para simular o comando download threadthreading = new uploadThread (); start (comando); } @Test public void testdown () lança IoException {byte [] buf; ByteArrayInputStream bis; String str = "canglaoshi.avi/nccentent, conteúdo, conteúdo"; buf = str.getBytes (); bis = novo byteArrayInputStream (BUF); UploadThread ut = new uploadThread (); ut.down (bis); }} // Subthread que conclui cada classe de tarefa de transmissão uploadthread implementa Runnable {Socket Socket; public uploadThread () {} public uploadThread (soquete) {this.socket = socket; } @Override public void run () {inputStream in; tente {in = socket.getInputStream (); para baixo (in); // manipulação de exceção} catch (ioexception e) {e.printStackTrace (); } finalmente {tente {socket.close (); } catch (ioexception e) {e.printStackTrace (); }} // código de teste/*tente {thread.sleep (5000); System.out.println (thread.currentThread (). GetName ()+", copyname ()+"); } catch (interruptedException e) {e.printStackTrace (); }*/} // Fim da execução Public void Setsocket (soquete Socket) {this.socket = Socket; } // Download Método/*** Objetivo: Escreva dados no InputStream para a idéia local*:* 1. Obtenha o fluxo de entrada, é melhor passá -lo no fluxo de entrada em vez de obtê -lo diretamente do soquete e passar para usar o fluxo de fluxo e o fluxo de saída* 4. Leia* 2. Leia o arquivo do arquivo no arquivo de entrada* 3. public void Down (inputStream in) lança IoException {// Variável local char ch; char [] namearr = novo char [256]; byte [] buf = novo byte [1024]; String name = ""; OutputStream out = null; // lógica de negócios tente {// Etapa 1: Obtenha o nome do arquivo e construa o fluxo de saída do arquivo Int I = 0; while ((ch = (char) in.read ())! = '/n') {namearr [i ++] = ch; } //name=namearr.ToString() ;///This Freence não pode converter uma matriz de caracteres em uma string. Você precisa usar o seguinte nome de declaração = new string (namearr); System.out.println ("O arquivo a ser baixado é:"+nome); out = new FileOutputStream ("src // down //"+nome); // Etapa 2: Escreva outros conteúdos no fluxo de entrada no arquivo int len; while ((len = in.read (buf))! =-1) {out.write (buf, 0, len); } out.flush (); // Exception Capture} Catch (ioException e) {E.printStackTrace (); // Recurso fechado} Finalmente {// Pergunta: Duas capturas podem ser montadas? Como lidar com exceções ao fechar o fluxo? in.Close (); out.Close (); } // Debug System.out.println (nome); }} // Fim do uploadThread Cliente de upload de arquivos:
/ *** Cliente que usa o protocolo TCP para implementar a função de upload* @author yajun*/ public class uploadclient {public static void main (string [] args) {uploadclient client = new uploadClient (); client.upload ("src // quinta -feira // aslistTest.java"); } / *** Função: Faça o upload do arquivo para o servidor* 1. Estabeleça uma conexão com o servidor* 2. Obtenha o fluxo de saída* 3. Escreva o conteúdo do arquivo no fluxo de saída* 4. Obtenha a resposta do servidor* / upload de vazio privado (nome da string) {soquete soquete = null; OutputStream Out; tente {socket = new Socket ("127.0.0.1", 5555); out = Socket.getOutputStream (); write2OutputStream (nome, out); // Captura de exceção} catch (desconhecidaHosception e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); }} @Test public void testUpload () {upload ("src // status.xml"); } / ** * Função: Passe o nome do arquivo e o fluxo de saída, escreva o arquivo no fluxo de saída * @param caminho * @throws ioexception * / private void write2OutputStream (caminho da string, saída de saída) lança ioexception {fileInputStream fis = null; byte [] buf = novo byte [1024]; String filename = ""; // lógica de negócios tente {// 1. Escreva o nome do arquivo FILENAME = PATH.SUBSTRING (PATH.LASTIndexOF ('//')+1); System.out.println ("O nome do arquivo que você deseja fazer é:"+nome do arquivo); out.write (filename.getBytes ()); out.write ('/n'); // 2. Escreva o conteúdo do arquivo fis = new FileInputStream (caminho); int len; while ((len = fis.read (buf))! =-1) {out.write (buf, 0, len); } out.flush (); // manipulação de exceção} catch (ioexception e) {e.printStackTrace (); // fechar o recurso} finalmente {fis.close (); out.Close (); }} // final do upload @test public void testWrite2OutputStream () lança IoException {byteArrayOutputStream out = null; tente {out = new ByteArrayOutputStream (); write2OutputStream ("src // status.xml", out); System.out.println (out.toString ("UTF-8"); } catch (ioexception e) {e.printStackTrace (); } finalmente {out.close (); }}}Este artigo foi compilado em "Resumo das técnicas de operação de upload de Java", e todos são convidados a aprender e ler.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.