この記事では、Javaソケットベースのファイル転送ケースを紹介し、参照のために共有されています。特定のコンテンツは次のとおりです
1。Javaコード
パッケージcom.wf.demo.socket.socketfile; java.net。*; java.io.*をインポートします。 / ** *2。Socket'sUtil Helper Class * * @Author Willson * */ public class Clientsocket {private string ip;プライベートインターポート;プライベートソケットソケット= null; dataoutputStream out = null; datainputStream getMessagestream = null; public clientsocket(string ip、int port){this.ip = ip; this.port = port; } / ** *ソケット接続の作成 * * @Throws例外 * / public void createconnection()スロー例外{try {socket = new Socket(ip、port); } catch(Exception e){e.printstacktrace(); if(socket!= null)socket.close(); eを投げる; }最後に{}} //メッセージの送信public void sendmessage(string sendmessage)throws exception {try {out = new DataOutputStream(socket.getOutputStream()); if(sendmessage.equals( "windows")){out.writebyte(0x1); out.flush();戻る; } if(sendmessage.equals( "unix")){out.writebyte(0x2); out.flush();戻る; } if(sendmessage.equals( "linux")){out.writebyte(0x3); out.flush(); } else {out.writeutf(sendmessage); out.flush(); }} catch(例外e){e.printstacktrace(); if(out!= null)out.close(); eを投げる; }最後に{}} //メッセージpublic datainputStream getMessagestream()スロー例外{try {getMessagestream = new DatainputStream(new BufferedInputStream(socket.getInputStream())); getMessagestreamを返します。 } catch(Exception e){e.printstacktrace(); if(getmessagestream!= null)getMessagestream.Close(); eを投げる; }最後に{}} //接続を閉じるpublic void shutdownConnection(){try {if(out!= null)out.close(); if(getmessagestream!= null)getMessagestream.Close(); if(socket!= null)socket.close(); } catch(例外e){}}} 2。Javaコード
パッケージcom.wf.demo.socket.socketfile; java.io.bufferedinputStreamをインポートします。 java.io.datainputStreamをインポートします。 java.io.dataoutputStreamをインポートします。 java.io.fileをインポートします。 java.io.fileinputStreamをインポートします。 java.net.serversocketをインポートします。 java.net.socketをインポートします。 / ** *1。ServerSide * * @Author Willson * */ public class servertest {int port = 8821; void start(){socket socket = null; try {Serversocket Serversocket = new Serversocket(port); while(true){//転送文字列のファイルを選択しますfilepath = "e://lib.zip";ファイルfi = new file(filepath); System.out.println( "ファイル名:" + fi.getName() + ";/tfile size():" +(int)fi.length() + "bytes"); // public socket Accept()throws // ioExceptionは、このソケットへの接続を聴いて受け入れます。このメソッドは、接続が行われるまでブロックします。 System.out.println( "クライアントが接続するのを待っています、接続ポート:" +ポート); socket = serversocket.accept(); System.out.println( "ソケットリンクの作成"); datainputStream dis = new DatainputStream(new BufferedInputStream(socket.getInputStream())); Dis.ReadByte(); datainputStream fis = new DatainputStream(new BufferedInputStream(new FileInputStream(FilePath))); dataoutputStream ps = new dataoutputStream(socket.getOutputStream()); //ファイル名と長さをクライアントに渡します。中国名の処理など、すべてのプラットフォームに真に適用するには、処理する必要もあります。詳細については、4番目に既製のコードがあります。 ps.writeutf(fi.getname()); ps.flush(); ps.writelong((long)fi.length()); ps.flush(); int buffersize = 8192; byte [] buf = new byte [buffersize]; while(true){int read = 0; if(fis!= null){read = fis.read(buf); } if(read == -1){break; } ps.write(buf、0、read); } ps.flush(); //ソケットリンクの閉鎖に注意してください。そうしないと、クライアントはサーバーのデータが来るのを待って、//ソケットのタイムアウトまで、データが不完全になります。 fis.close(); socket.close(); System.out.println( "ファイル転送完了/n"); }} catch(例外e){e.printstacktrace(); }} public static void main(string arg []){new servertest()。start(); }}
3。クライアント
パッケージcom.wf.demo.socket.socketfile; java.io.bufferedOutputStreamをインポートします。 java.io.datainputStreamをインポートします。 java.io.dataoutputStreamをインポートします。 java.io.fileoutputStreamをインポートします。 / ** * 3。クライアント * * @author willson * */ public class clientTest {private clientsocket cs = null; private string ip = "localhost"; // server ipに設定private int port = 8821;プライベート文字列sendmessage = "windwos"; public clientTest(){try {if(createconnection()){sendmessage(); getMessage( "f://"); }} catch(Exception ex){ex.printstacktrace(); }} private boolean createconnection(){cs = new Clientocket(ip、port); {cs.createconnection(); System.out.print( "サーバーに正常に接続されました!" + "/n"); trueを返します。 } catch(Exception e){System.out.print( "サーバーへの接続に失敗!" + "/n"); falseを返します。 }} private void sendmessage(){if(cs == null)return; {cs.sendmessage(sendmessage); } catch(Exception e){System.out.print( "メッセージが失敗する!" + "/n"); }} private void getMessage(String SavePath){if(cs == null)return; datainputStream inputstream = null; try {inputstream = cs.getMessagestream(); } catch(Exception E){System.out.print( "メッセージキャッシュエラー/n"を受信);戻る; } try {//ローカル保存パス、ファイル名はサーバー側から自動的に継承されます。 int buffersize = 8192; byte [] buf = new byte [buffersize]; int passedlen = 0; long len = 0; savepath += inputstream.readutf(); dataoutputStream fileout = new dataoutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(SavePath)))); len = inputstream.readlong(); system.out.println( "file size():" + len + "bytes"); System.out.println( "ファイルの受信を開始!" + "/n"); while(true){int read = 0; if(inputstream!= null){read = inputstream.read(buf); } passedlen += read; if(read == -1){break; } //次の進行状況バーは、グラフィカルインターフェイスのProgressBarで構成されています。ここでファイルを入力している場合、同じ割合の一部を繰り返し印刷することができます。 fileout.write(buf、0、read); } system.out.println( "受信、" + savepath + "/n"として保存されたファイル); fileout.close(); } catch(Exception e){System.out.println( "メッセージエラー" + "/n");戻る; }} public static void main(string arg []){new ClientTest(); }}この記事がJavaプログラミングを学ぶのに役立つことを願っています。