當前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]============================ 1. IP地址 ? IP地址,就是每一個接入互聯(lián)網(wǎng)的主機的唯一身份標識,IP地址 ? 0-255組成的,分成了4段,每段0-255 ? IP地

============================ 1. IP地址 ? IP地址,就是每一個接入互聯(lián)網(wǎng)的主機的唯一身份標識,IP地址 ? 0-255組成的,分成了4段,每段0-255 ? IP地址分類:ABCDE ? 局域網(wǎng):192.168開頭 ? 本地回環(huán)地址:127.0.0.1 每一個電腦,網(wǎng)卡正常工作,主機的IP就是127.0.0.1 ? IP地址這個事物也是對象,對IP地址對象的描述類 ? java.net.InetAddress ? 私有構(gòu)造方法,靜態(tài)方法返回本類對象的 ? static InetAddress getLocalHost() 獲取本地主機IP地址對象 ? 這個方法在哪個機器上運行,那個機器就是本地主機 ? ? InetAddress類中的兩個方法 getHostAddress()通過IP地址對象,獲取IP地址 ? InetAddress類中的兩個方法 getHostName()通過IP地址對象,獲取主機名 ? 如果獲取一臺主機的IP或者主機名,必須先獲取到一臺主機的IP對象(InetAddress) ? 獲取遠程主機IP地址對象 ? static InetAddress getByName(String host) 參數(shù),傳遞主機名,傳遞IP地址 /* ?* 獲取本地主機IP地址對象 ?* InetAddress類的靜態(tài)方法 getLocalHost ?*/ import java.net.*; public class InetAddressDemo { ?public static void main(String[] args)throws UnknownHostException { ? InetAddress i = InetAddress.getLocalHost(); ? System.out.println(i);//機器名/IP地址 ? //獲取主機名 ? String name = i.getHostName(); ? //獲取IP地址 ? String ip = i.getHostAddress(); ? System.out.println(name+"..."+ip); ?} }
?//=================================================== 2. 端口號 ? 操作系統(tǒng)的一個數(shù)字物理標識 ? 看成是進入或者出去操作系統(tǒng)的一個門牌號 ? 我郵寄一個包裹 昌平建材城西路100號 ? 收件:大興黃村北路200號 ? 端口號 0-1024操作系統(tǒng)保留號 ? 最大65535 ? 常見端口號: ? ? 80 http訪問互聯(lián)網(wǎng)的默認端口號 ? ? http://www.baidu.com:80 ? ? 21 FTP數(shù)據(jù)傳輸端口號 ? ? 8080 Javaweb服務(wù)器默認端口號 ? ? 3306 MySQL數(shù)據(jù)的連接端口號 ? ? 1521 Oracle數(shù)據(jù)庫連接端口號 ? ? 1433 MS SQLServer數(shù)據(jù)庫連接端口號 //=================================================== 3. 傳輸協(xié)議 ? 發(fā)送,接受兩個方面約定好的內(nèi)容 ? 兩個人打電話,相約晚上11點-11點30分可以通話,語音采用中文 ? UDP -- 面向無連接協(xié)議 ? 通信雙方不需要連接 ? 不需要連接,不可靠,丟數(shù)據(jù) ? 連接效率很高 ? 不允許傳輸大數(shù)據(jù),限制在64KB以內(nèi) ? TCP -- 面向連接協(xié)議 ? 通信雙方需要建立連接,三次握手,效率底下 ? 連接,安全可靠協(xié)議,不丟失數(shù)據(jù) ? 適合于大數(shù)據(jù)傳輸 //=================================================== 4. Socket服務(wù) ?Socket就是為網(wǎng)絡(luò)服務(wù)提供的一種機制 ?通信的兩端都有Socket ?提供接收和發(fā)送功能的 ?寫功能的時候,接收還是發(fā)送的,必須有Socket服務(wù) ?UDP的傳輸 ? 分為發(fā)送端和接收端 ? 發(fā)送端: ? ? A 發(fā)送的數(shù)據(jù)封包 -- 封裝數(shù)據(jù)包的類,DatagramPacket ? ? B 將封裝好的數(shù)據(jù)包,交給Socket進行發(fā)送 -- DategramSocket ? ? C 關(guān)閉資源 ? 接收端: ? ? A. 接收數(shù)據(jù)包,Socket接收 ? ? B. 拆包 ? ? C. 拆包后的信息,顯示出來 ? ? D. 關(guān)閉資源 ? ? DategramPacket數(shù)據(jù)包: ? ? 構(gòu)造方法DatagramPacket(byte[] buf, int length, InetAddress address, int port) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 字節(jié)數(shù)據(jù) 長度 IP地址 端口號 ? ? 構(gòu)造方法DatagramPacket(byte[] buf, int length) 接收 ? ? int getLength() 接收數(shù)據(jù)包中,數(shù)組的有效個數(shù) ? ? int getPort()獲取發(fā)送端口號 ? ? InetAddress getAddress()返回發(fā)送端的IP地址對象 ? ?DatagramSocket發(fā)送包,接收包 ? ?構(gòu)造方法,發(fā)送時候空參數(shù)的 ? ?發(fā)送方法,send(數(shù)據(jù)包) ? ?構(gòu)造DatagramSocket(int port) 接收,傳遞端口號 ? ?接收的方法 receive(數(shù)據(jù)包)
/* ?* UDP發(fā)送端 ?*/ import java.net.*; import java.util.Scanner; public class UDPSend { ?public static void main(String[] args) throws Exception{ ? new Scanner(System.in).nextLine(); ? //將數(shù)據(jù)封裝到數(shù)據(jù)包 DategramPacket ? byte[] bytes = "你好UDP".getBytes(); ? DatagramPacket dp = new ? ? DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"),10000); ? //創(chuàng)建投遞服務(wù)的Socket對象,DatagramSocket ? DatagramSocket ds = new DatagramSocket(8000); ? //將數(shù)據(jù)包,交給Socket發(fā)送 ? ds.send(dp); ? //關(guān)閉資源 ? ds.close(); ?} }

/* ?* UDP的接收端 ?*/ import java.net.*; public class UDPReceive { ?public static void main(String[] args) throws Exception{ ? //創(chuàng)建投遞服務(wù)的Socket對象 ? DatagramSocket ds = new DatagramSocket(10000); ? //定義數(shù)據(jù)包,接收 ? byte[] bytes = new byte[10]; ? DatagramPacket dp = new DatagramPacket(bytes,bytes.length); ? //Socket接收數(shù)據(jù)包 ? ds.receive(dp); ? //獲取數(shù)組中的有效個數(shù) ? int length = dp.getLength(); ? //獲取端口號 ? int port = dp.getPort(); ? //獲取發(fā)送端的IP地址對象 ? InetAddress i = dp.getAddress(); ? String ip = i.getHostAddress(); ? //輸出全部的信息 ? System.out.println(new String(bytes,0,length)+"..."+ip+"..."+port); ? //關(guān)閉資源 ? ds.close(); ? ?} }
//=================================================== 5. TCP ? 客戶端和服務(wù)器 ? 建立連接,客戶端必須連接服務(wù)器,否則程序無法運行 ? 客戶端的Socket服務(wù),Socket ? 服務(wù)器端的Socket服務(wù),ServerSocket ? Socket類構(gòu)造方法 Socket(String host, int port) ? 構(gòu)造方法,一旦執(zhí)行,就會去連接服務(wù)器,如果沒有服務(wù)器,拋出異常 ? ?OutputStream getOutputStream() 通過Socket對象獲取字節(jié)輸出流 ? ?InputStream getInputStream()通過Socket對象獲取字節(jié)輸入流 ? ?ServerSocket類構(gòu)造方法ServerSocket(int port) ?Socket accept()獲取客戶端的連接對象,這個方法告訴服務(wù)器,是哪一個客戶端連接的 ?客戶端通過自己Socket獲取字節(jié)輸出流,向服務(wù)器發(fā)送數(shù)據(jù) ?服務(wù)器通過客戶端連接對象Socket獲取字節(jié)輸入流,讀取客戶端發(fā)送的數(shù)據(jù) ?服務(wù)器通過客戶端連接對象Socket獲取字節(jié)輸出流,向客戶端發(fā)送數(shù)據(jù) ?客戶端通過字節(jié)的Socket對象獲取字節(jié)輸入流,讀取服務(wù)器發(fā)回的數(shù)據(jù)

?/* ?* TCP的客戶端 ?*/ import java.io.*; import java.net.*; public class TCPClient { ?public static void main(String[] args)throws Exception { ? //創(chuàng)建客戶端的Socket對象 ? Socket s = new Socket("127.0.0.1",10000); ? //將數(shù)據(jù)傳輸?shù)椒?wù)器,字節(jié)輸出流 ? OutputStream out = s.getOutputStream(); ? //寫,字節(jié)數(shù)組 ? out.write("你好TCP".getBytes()); ? ? //客戶端獲取服務(wù)器發(fā)回的信息,字節(jié)輸入流 ? InputStream in = s.getInputStream(); ? byte[] bytes = new byte[10]; ? int len = 0 ; ? len = in.read(bytes); ? System.out.println(new String(bytes,0,len)); ? //關(guān)閉資源 ? s.close(); ?} }


/* ?* TCP服務(wù)器 ?*/ import java.io.*; import java.net.*; public class TCPServer { ?public static void main(String[] args) throws Exception{ ? //創(chuàng)建服務(wù)器的Socket服務(wù) ? ServerSocket ss = new ServerSocket(10000); ? //知道是哪個客戶端連接的 ? Socket s = ss.accept();//線程等,等著客戶端連接 ? //有了客戶端對象Socket,完全可以使用客戶端連接對象,獲取IO流 ? //獲取字節(jié)輸入流 ? InputStream in = s.getInputStream(); ? byte[] bytes = new byte[10]; ? int len = 0 ; ? len = in.read(bytes); ? System.out.println(new String(bytes,0,len)); ? ? //服務(wù)器回客戶端一個信息,謝謝收到了 ? OutputStream out = s.getOutputStream(); ? out.write("謝謝收到了".getBytes()); ? s.close(); ? ss.close(); ?} } //=================================================== 6. TCP的案例 ?鍵盤錄入字母,發(fā)送給服務(wù)器,服務(wù)器轉(zhuǎn)成大寫字母,回傳客戶端,客戶端讀取服務(wù)器發(fā)回的大寫字母 ?通過案例暴露很多問題 ? ?A. 鍵盤讀取 OK ? ?B. 讀取到的鍵盤,發(fā)出去沒有,OK ? ?C. 服務(wù)器收到了嗎,服務(wù)器收到了 readLine()方法線程阻塞,等著讀 OK ? ?D. 服務(wù)器大寫數(shù)據(jù)發(fā)回了嗎 OK ? ?E. 客戶端讀取到了 OK
/* ?* 轉(zhuǎn)成大寫客戶端 ?*/ import java.io.*; import java.net.*; public class TCPClientToUpperCase { ?public static void main(String[] args) throws Exception{ ? //建立Socket服務(wù) ? Socket s = new Socket("127.0.0.1",10000); ? //讀取鍵盤輸入 ? BufferedReader bfr = new ? ? BufferedReader(new InputStreamReader(System.in)); ? ? //建立字節(jié)流對象,轉(zhuǎn)成字符流,讀取服務(wù)器發(fā)回的大寫字母 ? BufferedReader bfrin = ? ? new BufferedReader(new InputStreamReader(s.getInputStream())); ? ? //向服務(wù)器發(fā)送數(shù)據(jù),采用打印流 ? PrintWriter out = new PrintWriter(s.getOutputStream(),true); ? String line = null; ? while((line = bfr.readLine())!=null){ ? ?if("over".equals(line))break; ? ?out.println(line); ? ?//將數(shù)據(jù)打印到服務(wù)器,讀取服務(wù)器回來的大寫 ? ?String server = bfrin.readLine(); ? ?System.out.println("大寫字母是::"+server); ? } ? bfr.close(); ? s.close(); ?} }
/* ?* 轉(zhuǎn)換大寫服務(wù)器 ?*/ import java.io.*; import java.net.*; public class TCPServerToUpperCase { ?public static void main(String[] args) throws Exception{ ? //建立服務(wù)器Socket,獲取客戶端連接對象 ? ServerSocket ss = new ServerSocket(10000); ? Socket s = ss.accept(); ? //讀取客戶端的小寫字母,都是文本,按行讀 ? BufferedReader bfrin = new ? ? BufferedReader(new InputStreamReader(s.getInputStream())); ? ? //創(chuàng)建打印流對象,將大寫數(shù)據(jù),寫回客戶端 ? PrintWriter out = new PrintWriter(s.getOutputStream(),true); ? ? String line = null; ? while((line = bfrin.readLine())!=null){ ? ?if("over".equals(line)) ? ? break; ? ? out.println(line.toUpperCase()); ? } ? s.close(); ? ss.close(); ?} }


//=================================================== 7. TCP文本上傳 ?將C盤上的源文件,通過TCP服務(wù)器傳遞到D盤upload目錄中 ? ?客戶端 ? ?IO讀取文本文件 ? ?打印流,將文本打印到服務(wù)器 ? ?讀取上傳成功四個字 ?服務(wù)器 ? ?讀取客戶端的文本文件,保存到目的中(D盤) ? ?將上傳成功四個字,會給客戶端 ? ?服務(wù)器停不下來 ?服務(wù)器讀取的是Socket中的字節(jié)流null; ?客戶端,和服務(wù)器之間,約定一個結(jié)束標記 ?java工程師們很善良,定義好了結(jié)束標記 ?Socket類中的方法 void shutdownOutput()
/* ?* TCP文本上傳客戶端 ?*/ import java.io.*; import java.net.*; public class TCPCilentUpLoad { ?public static void main(String[] args) throws Exception{ ? Socket s = new Socket("127.0.0.1", 10000); ? //字符流,讀取文本文件 ? BufferedReader bfr = new BufferedReader(new FileReader("c:\1.txt")); ? //將文本使用打印流,打印到服務(wù)器 ? PrintWriter out = new PrintWriter(s.getOutputStream(),true); ? String line = null; ? while((line=bfr.readLine())!=null){ ? ?out.println(line); ? } ? //out.println("*&^%$#@@#$TRJHGFD&%^$#@"); ? s.shutdownOutput(); ? //讀取服務(wù)器的上傳成功 ? InputStream in = s.getInputStream(); ? byte[] bytes = new byte[10]; ? int len = in.read(bytes); ? System.out.println("服務(wù)器說::"+new String(bytes,0,len)); ? bfr.close(); ? s.close(); ?} }


* ?* 文本上傳服務(wù)器 ?*/ import java.io.*; import java.net.*; import java.util.*; public class TCPServerUpLoad { ?public static void main(String[] args)throws Exception { ? ServerSocket ss = new ServerSocket(10000); ? Socket s = ss.accept(); ? //讀取客戶端的數(shù)據(jù),轉(zhuǎn)換流 ? BufferedReader bfrin = new ? ? BufferedReader(new InputStreamReader(s.getInputStream())); ? //將目的封裝成File對象 ? File file = new File("d:\upload"); ? if(!file.exists()) ? ?file.mkdirs(); ? //封裝數(shù)據(jù)目的,使用打印流 ? //對上傳的文件名修改 ? String filename = "itcast"+System.currentTimeMillis()+new Random().nextInt(999999999)+".txt"; ? PrintWriter pw = new PrintWriter(new FileWriter(file+File.separator+filename),true); ? String line = null; ? while((line = bfrin.readLine())!=null){ ? ?pw.println(line); ? } ? //上傳成功寫回客戶端 ? ? OutputStream out = s.getOutputStream(); ? out.write("上傳成功".getBytes()); ? pw.close(); ? s.close(); ? ss.close(); ?} }

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉