Java——網絡編程練習

練習一(黑馬程序員面試題):客戶端向服務器寫字符串(鍵盤錄入),服務器(多線程)將字符串反轉后寫回,客戶端再次讀取到的是反轉后的字符串

相關代碼如下:

package com.wsq.test;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;public class Test1_Client {
/*** 客戶端向服務器寫字符串(鍵盤錄入),服務器(多線程)將字符串反轉后寫回,客戶端再次讀取到的是反轉后的字符串* @throws IOException * @throws UnknownHostException * * * */public static void main(String[] args) throws UnknownHostException, IOException {Scanner sc = new Scanner(System.in);            //創建鍵盤錄入對象Socket wsq = new Socket("192.168.1.182",1014);  //創建Socket客戶端,指定IP地址和端口號(不超過65535即可)BufferedReader br = new BufferedReader(new InputStreamReader(wsq.getInputStream()));        //獲取輸入流PrintStream ps = new PrintStream(wsq.getOutputStream());            //獲取輸出流//對getInputStream()和getOutputStream()進行包裝ps.println(sc.nextLine());                                      //客戶端將字符串(鍵盤錄入)寫到服務器去System.out.println(br.readLine());                              //將反轉后的結果讀出來wsq.close();                            //只需要關Socket就行(wsq是Socket對象)//public void close()throws IOException //關閉此套接字也將會關閉該套接字的 InputStream 和 OutputStream。 //也就是說,只要把Socket關閉,InputStream和OutputStream也會關閉}}
package com.wsq.test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;public class Test2_Server {public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(1014);//創建多線程服務器//public ServerSocket(int port)throws IOException創建綁定到特定端口的服務器套接字。端口 0 在所有空閑端口上創建套接字。//參數:port - 端口號;或者為 0,表示使用任何空閑端口。 System.out.println("服務器已啟動,已綁定1014端口");//輸出一句提示語句while(true){                                //不斷地接收客戶端的請求final Socket wsq = server.accept();     //接收客戶端的請求//public Socket accept()throws IOException偵聽并接受到此套接字的連接。//返回:新套接字 //匿名內部類所用到的局部變量必須被final修飾new Thread(){                           //運用匿名內部類,來開啟一條線程public void run(){                  //重寫Thread()這個(線程)抽象類里面的run方法try {BufferedReader br = new BufferedReader(new InputStreamReader(wsq.getInputStream()));        //獲取輸入流PrintStream ps = new PrintStream(wsq.getOutputStream());        //獲取輸出流//客戶端將內容給發送到服務端//再對getInputStream()和getOutputStream()方法進行包裝String line = br.readLine();            //將客戶端寫過來的數據讀取出來line = new StringBuilder(line).reverse().toString();    //鏈式編程//line = new StringBuilder(line)先把line封裝成一個StringBuilder對象,變成一個緩沖區 //再.reverse(),進行反轉(倒序)//然后再.toString()將數據轉化成字符串ps.println(line);                       //把反轉后的內容給寫回去,然后再在Client(客戶端)把寫出來的數據給讀出來//服務端進行將客戶端發送的數據進行給讀寫出來wsq.close();                            //只需要關Socket就行(wsq是Socket對象)//public void close()throws IOException //關閉此套接字也將會關閉該套接字的 InputStream 和 OutputStream。 //也就是說,只要把Socket關閉,InputStream和OutputStream也會關閉} catch (Exception e) {e.printStackTrace();}}}.start();}}}

練習二(黑馬程序員面試題):客戶端向服務器上傳文件

相關步驟如下:* 1,提示輸入要上傳的文件路徑,驗證路徑是否存在以及是否是文件夾* 2,發送文件名到服務器* 3,建立多線程的服務器* 4,讀取文件名* 5,判斷文件是否存在,將結果發回客戶端* 6,接收結果,如果存在給予提示,程序直接退出* 7,如果不存在,定義FileInputStream讀取文件,寫出到網絡* 8,定義FileOutputStream,從網絡讀取數據,存儲到本地

相關代碼如下:

package com.wsq.test;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;public class Test1_UpdateClient {
/*** * 客戶端向服務器上傳文件* * * 1,提示輸入要上傳的文件路徑,驗證路徑是否存在以及是否是文件夾* 2,發送文件名到服務器* 6,接收結果,如果存在給予提示,程序直接退出* 7,如果不存在,定義FileInputStream讀取文件,寫出到網絡* @throws IOException * @throws UnknownHostException * * * */public static void main(String[] args) throws UnknownHostException, IOException {
//1,提示輸入要上傳的文件路徑,驗證路徑是否存在以及是否是文件夾File file = getFile();
//2,發送文件名到服務器Socket socket = new Socket("192.168.1.182",1014);BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintStream ps = new PrintStream(socket.getOutputStream());     //創建輸出流ps.println(file.getName());                                     //把文件名發送給服務端
//6,接收結果,如果存在給予提示,程序直接退出String result = br.readLine();                  //讀取 “存在”或者“不存在”的結果if("存在".equals(result)){System.out.println("您上傳的文件已經存在,請不要重復上傳");socket.close();return;}
//7,如果不存在,定義FileInputStream讀取文件,寫出到網絡FileInputStream fis = new FileInputStream(file);    //這里一定要用字節流,因為上傳的文件可能是文本,也可能是音頻,視頻等文件,字節流可以拷貝任何文件byte [] arr = new byte[8192];int len;while((len = fis.read(arr)) != -1){ps.write(arr,0,len);                            //將讀到的內容寫到服務器上去//PrintStream既可以寫字符串,也可以寫字節,而BufferedWriter,是字符流,沒辦法寫字節}                                           fis.close();socket.close();}private static File getFile() {//生成方11法,為了需要獲取到文件Scanner sc = new Scanner(System.in);        // 創建鍵盤錄入對象System.out.println("請輸入一個文件路徑");while(true){String line =sc.nextLine();File file = new File(line);if(! file.exists()){System.out.println("您錄入的文件錄入不存在,請重新錄入:");}else if(file.isDirectory()){System.out.println("您錄入的是文件夾路徑,請錄入一個文件路徑:");}else{return file;}}}}
package com.wsq.test;import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;public class Test2_UpdateServer {
/*** * 3,建立多線程的服務器* 4,讀取文件名* 5,判斷文件是否存在,將結果發回客戶端* 6,定義FileOutputStream,從網絡讀取數據,存儲到本地* @throws IOException   * * * * */public static void main(String[] args) throws IOException {
//3,建立多線程的服務器ServerSocket server = new ServerSocket(1014); System.out.println("服務器已啟動,已綁定1014端口號");//4,讀取文件名while(true){final Socket socket = server.accept();      //接收客戶端的請求 new Thread(){public void run(){try {InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));PrintStream ps = new PrintStream(socket.getOutputStream());     //創建輸出流String fileName = br.readLine();    //讀取文件名//5,判斷文件是否存在,將結果發回客戶端File dir = new File("update");dir.mkdir();                        //創建文件夾File file = new File(dir,fileName); //封裝成File鍍錫if(file.exists()){                  //如果服務器已經存在這個文件ps.println("存在");               //將“存在”寫給客戶端socket.close();                 //關閉socket;return;}else {ps.println("不存在");}
//8,定義FileOutputStream,從網絡讀取數據,存儲到本地FileOutputStream fos = new FileOutputStream(file);byte [] arr = new byte [8192];int len;while((len = is.read(arr)) != -1){fos.write(arr, 0, len);}fos.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}.start();}}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379833.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379833.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379833.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第一章 基礎知識---1.4Crack小實驗--復現

0x01 程序及其編譯環境 程序如下&#xff0c;功能&#xff1a;我們必須輸入正確的密碼1234567才能得到密碼驗證的確認&#xff0c;跳出循環。否則程序提示密碼錯誤再次輸入。 #include <stdio.h>#define PASSWORD "1234567"int verify_password(char* passwo…

.net中調用exchange服務器發郵件

普通的郵件, 用System.Net.Mail 類 或 System.Web.Mail 類 處理即可, 但是Exchange Server 環境下, 這兩個類起不了作用-------至少目前我看到的情況如此. 整個過程如下: 1. 先添加COM 引用 "Microsoft CDO for Windows 2000 Library" .2. 發送郵件的代碼: CDO.Messa…

Java Double類doubleToLongBits()方法與示例

Double類doubleToLongBits()方法 (Double class doubleToLongBits() method) doubleToLongBits() method is available in java.lang package. doubleToLongBits()方法在java.lang包中可用。 doubleToLongBits() method follows IEEE 754 double floating-point standards and …

Firefox(火狐瀏覽器)彩蛋

①在地址欄上輸入&#xff1a; about:mozilla ②在地址欄上輸入&#xff1a; about:robots ③在地址欄上輸入&#xff1a; www.figma.com/404/ ④地址欄上輸入&#xff1a; chrome://global/content/alerts/alert.xul

jquery.history插件在ie中失效的問題

hash標志中不能有? ff中不存在這個問題。 轉載于:https://www.cnblogs.com/xyun/archive/2008/12/01/1345188.html

Java——反射(Class.forName()讀取配置文件舉例).

榨汁機(Juicer)榨汁機的案例&#xff1a; 分別有水果(Fruit),蘋果(Apple)&#xff0c;香蕉(Bananal)&#xff0c;橘子(Orange),榨汁(squeeze) 要求&#xff1a; 榨出不同的水果汁來喝 //一般方法求解 package com.testl;public class Text1 {public static void main(Strin…

java 根據類名示例化類_Java類類getEnclosingClass()方法及示例

java 根據類名示例化類類的類getEnclosingClass()方法 (Class class getEnclosingClass() method) getEnclosingClass() method is available in java.lang package. getEnclosingClass()方法在java.lang包中可用。 getEnclosingClass() method is used to return recent or im…

C++:cin.getline

轉&#xff1a;百度百科 http://baike.baidu.com/view/2383876.htm cin.getline 此函數是按行讀取,其語法為:cin.getline(字符指針,字符個數N,結束符); 功能是&#xff1a;一次讀取多個字符(包括空白字符&#xff09;&#xff0c;直到讀滿N-1個&#xff0c;或者遇到指定的結束符…

端口復用和重映射--STM32F103

什么是端口復用&#xff1f; STM32中有很多內置外設&#xff0c;這些外設的引腳都是與GPIO復用的&#xff0c;什么時候復用呢&#xff1f;就是當一個GPIO作為內置外設引腳使用時&#xff0c;就叫做復用。比如串口1的發送接收引腳是PA9&#xff0c;PA10&#xff0c;當PA9&#…

考研數學

眼前儼然一副冬的氣象&#xff0c;伴隨氣溫的驟降&#xff0c;考研復習也進入異常緊張的階段。在考試前這兩個月里&#xff0c;考生如何復習數學&#xff0c;成績還可以有所提高。萬學?海文數學教研組針對沖刺階段數學復習歸納總結以下復習經驗和建議&#xff0c;供大家參考。…

一個很好的自學網站~推薦一下

http://www.51zxw.net/study.asp?vip15746908

[轉]Ubuntu遠程桌面登陸

原文地址&#xff1a;http://www.cnblogs.com/xdzone/archive/2011/03/10/1979644.html 1.xp下默認的遠程桌面協議是rdp&#xff0c;默認端口3389&#xff0c;而ubuntu用的時vnc&#xff1a;默認端口5900 2.首先被訪問的主機&#xff08;windows/linux&#xff09;都要設置為允…

NVIC中斷管理---STM32

NVIC&#xff1a;嵌套向量中斷控制器 在了解中斷之前&#xff0c;我們先了解搶占優先級和響應優先級 搶占優先級和響應優先級 搶占優先級決定能不能打斷&#xff0c;高優先級的搶占可以中斷低優先級的搶占響應優先級在搶占優先級相同時&#xff0c;高響應優先級先執行&#x…

Java BigDecimal stripTrailingZeros()方法與示例

BigDecimal類stripTrailingZeros()方法 (BigDecimal Class stripTrailingZeros() method) stripTrailingZeros() method is available in java.math package. stripTrailingZeros()方法在java.math包中可用。 stripTrailingZeros() method is used to get a BigDecimal that is…

外部中斷---STM32F1

外部中斷概述 STM32的中斷控制器支持19個外部中斷/事件請求&#xff1a; 線0-15&#xff1a;對應外部IO口的輸入中斷線16&#xff1a;連接到PVD輸出線17&#xff1a;連接到RTC鬧鐘事件線18&#xff1a;連接到USB喚醒事件 STM32每個IO口都有可以作為外部中斷輸入&#xff0c;…

轉:點9圖

關于”點九” 轉&#xff1a;http://mux.baidu.com/?p1506“點九”是andriod平臺的應用軟件開發里的一種特殊的圖片形式&#xff0c;文件擴展名為&#xff1a;.9.png 智能手機中有自動橫屏的功能,同一幅界面會在隨著手機(或平板電腦)中的方向傳感器的參數不同而改變顯示的方向…

Python HTMLCalendar類| 帶實例的formatyear()方法

Python HTMLCalendar.formatyear()方法 (Python HTMLCalendar.formatyear() Method) formatyear() method is an inbuilt method of the HTMLCalendar class of calendar module in Python. It works on HTMLCalendar class object and returns an HTML table consisting of th…

2009中國企業家新春聯誼會

2009中國企業家新春聯誼會——把握當前機遇&#xff0c;笑對經濟危機&#xff0c;暢飲將帥美酒尊敬的嘉賓&#xff1a;當前&#xff0c;國際形勢正在發生深刻而復雜的變化&#xff0c;由美國次貸危機引發的全球經濟危機已經愈演愈烈&#xff0c;美國前五大投資銀行有3家宣告破產…

串口通信的基本原理----STM32

串口通信基本原理 1. 處理器與外部設置通信的基本方式 并行通信&#xff1a;數據各個位同時傳輸串行通信&#xff1a;數據按位順序傳輸 在串行通信中&#xff0c;按照數據的傳輸方向&#xff0c;又分為&#xff1a; 單工&#xff1a;數據傳輸只支持在一個方向傳輸半雙工&am…

java獲取vm運行參數_如何獲取在Java中運行Java VM的版本?

java獲取vm運行參數To get the version of running VM (Virtual Machine) in Java, we use the getProperties() method, which is defined in System class, while calling the method, we need to pass the property name to get the version of running Java VM. 要獲取Java…