今天咱們將使用一個簡單的小Demo模擬網絡文件的下載。
咱們將會用一道題來說述網絡編程所用到的知識點,問題以下:
利用網絡編程內容從客戶端向服務端發送一個文件,而後服務端保存在其餘地方。
咱們首先建立兩個java文件,一個用作客戶端,一個用作服務端,客戶端進行文件上傳模擬,服務端進行文件下載模擬。
首先在服務端建立ServerSocket,給定一個端口號。java
ServerSocket ss = new ServerSocket(1110);//參數爲端口號 System.out.println("等待上線。。。");
端口號是指每個軟件與服務器進行通訊的特定「門牌號」,1-1024的端口號大部分爲系統內置軟件,通常不會使用(可使用,但通常不用)。
在進行服務端建立後,咱們就要在客戶端建立Socket用來與服務端進行通訊。web
Socket client = new Socket("localhost", 1110); //第一個參數是ip地址,本地可使用localhost代替,第二個是服務端設置好的端口號
localhost與127.0.0.1在使用過程當中均可以表明本機,可是要注意localhost是域名,127.0.0.1是ip地址。
接下來咱們就能夠進行對io流的操做了,關於io流的操做咱們改天會講,在這裏就不作過多的闡述了。具體代碼以下
服務端:編程
public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(1110);//設置服務端的端口號 System.out.println("等待上線。。。"); Socket accept = ss.accept();//接受客戶傳遞來的信息 System.out.println("有人上線了!!!"); File f = new File("d:\\1.mp4");//建立保存的地址 InputStream in = accept.getInputStream(); OutputStream out = new FileOutputStream(f); int len = 0; byte[] b = new byte[1024]; while((len=in.read(b))!=-1) { out.write(b); } System.out.println("傳輸完畢"); //最後要注意關閉資源 ss.close(); in.close(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
客戶端服務器
public static void main(String[] args) { try { Socket client = new Socket("localhost", 1110);//設置訪問的ip地址和要訪問的端口號 OutputStream out = client.getOutputStream(); File f = new File("C:\\List集合.mp4");//要上傳文件的地址 InputStream in = new FileInputStream(f); String s = "我來充錢了"; int len = 0; byte[] b = new byte[1024]; while((len = in.read(b))!=-1) { out.write(b, 0, len); } //注意關流 client.close(); out.close(); in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
本次只是一個小的Demo,還有許多能夠改進的地方,好比關流的實機能夠放在finally中,還有文件的位置能夠本身選擇,這時候就須要使用字符串來分割文件的後綴名等等狀況,你們若是有興趣能夠本身嘗試的完善。網絡
我是一個正在偷偷努力學習java的大胖子,有任何問題你們均可以發在個人我的公衆號上邊,我也會盡可能幫你們解決,固然,我也只是一個正在學習java的人,並不能保證「每一個(實際上是大部分問題都不能)」問題都能回答上來。
還有個人我的公衆號會不定時更新個人java學習之路,你們若是也在學習java能夠在公衆號上邊與我交流哦。
svg