




已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java中的TCP/UDP網(wǎng)絡(luò)通信編程是回路地址,用于測(cè)試,相當(dāng)于localhost本機(jī)地址,沒有網(wǎng)卡,不設(shè)DNS都可以訪問(wèn).端口地址在065535之間,其中01023之間的端口是用于一些知名的網(wǎng)絡(luò)服務(wù)和應(yīng)用,用戶的普通網(wǎng)絡(luò)應(yīng)用程序應(yīng)該使用1024以上的端口.網(wǎng)絡(luò)應(yīng)用中基本上都是TCP(Transmission Control Protocol傳輸控制協(xié)議)和UDP(User Datagram Protocol用戶數(shù)據(jù)報(bào)協(xié)議),TCP是面向連接的通信協(xié)議,UDP是無(wú)連接的通信協(xié)議.Socket連接套接字,Java分別為TCP和UDP提供了相應(yīng)的類,TCP是.ServerSocket(用于服務(wù)器端)和.Socket(用于客戶端);UDP是.DatagramSocket.1,Java編寫UDP網(wǎng)絡(luò)程序1.1,DatagramSocketDatagramSocket有如下構(gòu)造方法:1,DatagramSocket() :構(gòu)造數(shù)據(jù)報(bào)套接字并將其綁定到本地主機(jī)上任何可用的端口。2,DatagramSocket(int port):創(chuàng)建數(shù)據(jù)報(bào)套接字并將其綁定到本地主機(jī)上的指定端口。3,DatagramSocket(int port, InetAddress laddr):創(chuàng)建數(shù)據(jù)報(bào)套接字,將其綁定到指定的本地地址。即指定網(wǎng)卡發(fā)送和接收數(shù)據(jù).如果在創(chuàng)建DatagramSocket對(duì)象時(shí),沒有指定網(wǎng)卡的IP 地址,在發(fā)送數(shù)據(jù)時(shí),底層驅(qū)動(dòng)程序會(huì)自動(dòng)選擇一塊網(wǎng)卡去發(fā)送,在接收數(shù)據(jù)時(shí),會(huì)接收所有的網(wǎng)卡收到的與端口一致的數(shù)據(jù).發(fā)送信息時(shí),可以不指定端口號(hào),接收信息時(shí),要指定端口號(hào),因?yàn)橐邮罩付ǖ臄?shù)據(jù).發(fā)送數(shù)據(jù)使用DatagramSocket.send(DatagramPacket p)方法,接收數(shù)據(jù)使用DatagramSocket.receive(DatagramPacket p)方法.1.2,DatagramPacketDatagramPacket類有如下構(gòu)造方法:1,DatagramPacket(byte buf, int length):構(gòu)造 DatagramPacket,用來(lái)接收長(zhǎng)度為length的數(shù)據(jù)包。2,DatagramPacket(byte buf, int length, InetAddress address, int port):構(gòu)造數(shù)據(jù)報(bào)包,用來(lái)將長(zhǎng)度為length的包發(fā)送到指定主機(jī)上的指定端口號(hào)。接收數(shù)據(jù)時(shí)使用第一次構(gòu)造方法,發(fā)送數(shù)據(jù)時(shí)使用第二種構(gòu)造方法.1.3,InetAddressJava中對(duì)IP地址進(jìn)行包裝的類,DatagramPacket.getAddress()可以獲取發(fā)送或接收方的IP地址.DatagramPacket.getPort()可以獲取發(fā)送或接收方的端口.1.4,UDP程序例子發(fā)送程序:import .DatagramPacket;import .DatagramSocket;import .InetAddress;public class UdpSend public static void main(String args) throws Exception DatagramSocket ds = new DatagramSocket();String str = hello , world!;DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName(05),3000);ds.send(dp);ds.close(); /關(guān)閉連接接收程序:import .DatagramPacket;import .DatagramSocket;public class UdpRecv public static void main(String args) throws Exception DatagramSocket ds = new DatagramSocket(3000);byte buf = new byte1024;DatagramPacket dp = new DatagramPacket(buf,buf.length);ds.receive(dp);String str = new String(dp.getData(),0,dp.getLength();System.out.println(str);System.out.println(IP: + dp.getAddress().getHostAddress() + ,PORT: + dp.getPort();ds.close();測(cè)試要先運(yùn)行接收程序,再運(yùn)行發(fā)送程序.如果接收程序沒有接收到數(shù)據(jù),則會(huì)一直阻塞,接收到數(shù)據(jù)后才會(huì)關(guān)閉程序.如果網(wǎng)絡(luò)上沒有數(shù)據(jù)發(fā)送過(guò)來(lái),接收程序也沒有阻塞,通常都是使用了一個(gè)已經(jīng)被占用的端口.2,Java編寫TCP網(wǎng)絡(luò)程序2.1,ServerSocket編寫TCP網(wǎng)絡(luò)服務(wù)程序,首先要用到.ServerSocket類用以創(chuàng)建服務(wù)器Socket.它的常用構(gòu)造方法有:1,ServerSocket(int port):創(chuàng)建綁定到特定端口的服務(wù)器套接字。2,ServerSocket(int port, int backlog):利用指定的backlog(服務(wù)器忙時(shí)保持連接請(qǐng)求的等待客戶數(shù)量),創(chuàng)建服務(wù)器套接字并將其綁定到指定的本地端口號(hào)。3,ServerSocket(int port, int backlog, InetAddress bindAddr):使用指定的端口、偵聽 backlog 和要綁定到的本地 IP 地址創(chuàng)建服務(wù)器。2.2,Socket客戶端要與服務(wù)器建立連接,必須先創(chuàng)建一個(gè)Socket對(duì)象,它的常用構(gòu)造方法有:1,Socket(String host, int port):創(chuàng)建一個(gè)流套接字并將其連接到指定主機(jī)上的指定端口號(hào)。2,Socket(InetAddress address, int port):創(chuàng)建一個(gè)流套接字并將其連接到指定 IP 地址的指定端口號(hào)。3,Socket(InetAddress address, int port, InetAddress localAddr, int localPort):創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程端口上的指定遠(yuǎn)程地址。4,Socket(String host, int port, InetAddress localAddr, int localPort):創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程主機(jī)上的指定遠(yuǎn)程端口。對(duì)于通常情況的應(yīng)用,使用第1個(gè)構(gòu)造方法來(lái)創(chuàng)建客戶端的Socket對(duì)象,并與服務(wù)器建立連接,是非常簡(jiǎn)單和方便的.服務(wù)器端程序調(diào)用ServerSocket.accept方法等待客戶端的連接請(qǐng)求,一旦accept接收了客戶端連接請(qǐng)求,該方法返回一個(gè)與該客戶端建立了專線連接的Socket對(duì)象,不用程序去創(chuàng)建這個(gè)Socket對(duì)象.建立了連接的兩個(gè)Socket是以IO流的方式進(jìn)行數(shù)據(jù)交換的,Java提供了Socket.getInputStream返回Socket的輸入流對(duì)象,Socket.getOutputStream返回Socket的輸出流對(duì)象.2.3,TCP程序例子的服務(wù)器程序:import java.io.InputStream;import java.io.OutputStream;import .ServerSocket;import .Socket;public class TcpServer public static void main(String args) throws Exception ServerSocket ss = new ServerSocket(8000);Socket s = ss.accept();InputStream ips = s.getInputStream();OutputStream ops = s.getOutputStream();ops.write(hello,World!.getBytes();byte buf = new byte1024;int len = ips.read(buf);System.out.println(new String(buf,0,len);ips.close();ops.close();s.close();ss.close();在這個(gè)程序里,創(chuàng)建了一個(gè)在8000端口上等待連接的ServerSocket對(duì)象,當(dāng)接收到一個(gè)客戶的連接請(qǐng)求后,程序從與這個(gè)客戶建立了連接的Socket對(duì)象中獲得輸入輸出流對(duì)象,通過(guò)輸出流首先向客戶端發(fā)送一串字符,然后通過(guò)輸入流讀取客戶端發(fā)送過(guò)來(lái)的信息,并將這些信息打印,然后關(guān)閉所有資源.要先運(yùn)行服務(wù)器程序,然后才能運(yùn)行客戶端程序,當(dāng)TCP服務(wù)器程序運(yùn)行到Socket.accpet()方法等待客戶連接時(shí),accept方法將阻塞,一直到有客戶連接請(qǐng)求到來(lái),該方法才會(huì)返回,如果又沒有請(qǐng)求到來(lái),又沒有發(fā)生阻塞,通常都是使用了一個(gè)已經(jīng)被占用的端口.我們可以使用windows提供的telnet工具在命令行窗口中測(cè)試一下服務(wù)器程序:命令如下:telnet localhost 8000可以看到,telnet只要有輸入就發(fā)送,因此我們?nèi)绻胍诜?wù)器端一次讀多個(gè)字符的話,還需要進(jìn)一步處理,看如下代碼:import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import .ServerSocket;import .Socket;public class TcpServer public static void main(String args) throws Exception ServerSocket ss = new ServerSocket(8000);Socket s = ss.accept();InputStream ips = s.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(ips); /對(duì)InputStream進(jìn)行包裝,增加了緩存OutputStream ops = s.getOutputStream();ops.write(hello,World!.getBytes();System.out.println(br.readLine();br.close(); /關(guān)閉包裝類,會(huì)自動(dòng)關(guān)閉里面的基類ops.close();s.close();ss.close();再次使用telnet工具可以看到,這次可以發(fā)送不止一個(gè)字符了,按回車鍵后發(fā)送數(shù)據(jù)到服務(wù)器端.2,Java編寫TCP網(wǎng)絡(luò)程序2.1,ServerSocket編寫TCP網(wǎng)絡(luò)服務(wù)程序,首先要用到.ServerSocket類用以創(chuàng)建服務(wù)器Socket.它的常用構(gòu)造方法有:1,ServerSocket(int port):創(chuàng)建綁定到特定端口的服務(wù)器套接字。2,ServerSocket(int port, int backlog):利用指定的backlog(服務(wù)器忙時(shí)保持連接請(qǐng)求的等待客戶數(shù)量),創(chuàng)建服務(wù)器套接字并將其綁定到指定的本地端口號(hào)。3,ServerSocket(int port, int backlog, InetAddress bindAddr):使用指定的端口、偵聽 backlog 和要綁定到的本地 IP 地址創(chuàng)建服務(wù)器。2.2,Socket客戶端要與服務(wù)器建立連接,必須先創(chuàng)建一個(gè)Socket對(duì)象,它的常用構(gòu)造方法有:1,Socket(String host, int port):創(chuàng)建一個(gè)流套接字并將其連接到指定主機(jī)上的指定端口號(hào)。2,Socket(InetAddress address, int port):創(chuàng)建一個(gè)流套接字并將其連接到指定 IP 地址的指定端口號(hào)。3,Socket(InetAddress address, int port, InetAddress localAddr, int localPort):創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程端口上的指定遠(yuǎn)程地址。4,Socket(String host, int port, InetAddress localAddr, int localPort):創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程主機(jī)上的指定遠(yuǎn)程端口。對(duì)于通常情況的應(yīng)用,使用第1個(gè)構(gòu)造方法來(lái)創(chuàng)建客戶端的Socket對(duì)象,并與服務(wù)器建立連接,是非常簡(jiǎn)單和方便的.服務(wù)器端程序調(diào)用ServerSocket.accept方法等待客戶端的連接請(qǐng)求,一旦accept接收了客戶端連接請(qǐng)求,該方法返回一個(gè)與該客戶端建立了專線連接的Socket對(duì)象,不用程序去創(chuàng)建這個(gè)Socket對(duì)象.建立了連接的兩個(gè)Socket是以IO流的方式進(jìn)行數(shù)據(jù)交換的,Java提供了Socket.getInputStream返回Socket的輸入流對(duì)象,Socket.getOutputStream返回Socket的輸出流對(duì)象.2.3,TCP程序例子的服務(wù)器程序:import java.io.InputStream;import java.io.OutputStream;import .ServerSocket;import .Socket;public class TcpServer public static void main(String args) throws Exception ServerSocket ss = new ServerSocket(8000);Socket s = ss.accept();InputStream ips = s.getInputStream();OutputStream ops = s.getOutputStream();ops.write(hello,World!.getBytes();byte buf = new byte1024;int len = ips.read(buf);System.out.println(new String(buf,0,len);ips.close();ops.close();s.close();ss.close();在這個(gè)程序里,創(chuàng)建了一個(gè)在8000端口上等待連接的ServerSocket對(duì)象,當(dāng)接收到一個(gè)客戶的連接請(qǐng)求后,程序從與這個(gè)客戶建立了連接的Socket對(duì)象中獲得輸入輸出流對(duì)象,通過(guò)輸出流首先向客戶端發(fā)送一串字符,然后通過(guò)輸入流讀取客戶端發(fā)送過(guò)來(lái)的信息,并將這些信息打印,然后關(guān)閉所有資源.要先運(yùn)行服務(wù)器程序,然后才能運(yùn)行客戶端程序,當(dāng)TCP服務(wù)器程序運(yùn)行到Socket.accpet()方法等待客戶連接時(shí),accept方法將阻塞,一直到有客戶連接請(qǐng)求到來(lái),該方法才會(huì)返回,如果又沒有請(qǐng)求到來(lái),又沒有發(fā)生阻塞,通常都是使用了一個(gè)已經(jīng)被占用的端口.我們可以使用windows提供的telnet工具在命令行窗口中測(cè)試一下服務(wù)器程序:命令如下:telnet localhost 8000可以看到,telnet只要有輸入就發(fā)送,因此我們?nèi)绻胍诜?wù)器端一次讀多個(gè)字符的話,還需要進(jìn)一步處理,看如下代碼:import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import .ServerSocket;import .Socket;public class TcpServer public static void main(String args) throws Exception ServerSocket ss = new ServerSocket(8000);Socket s = ss.accept();InputStream ips = s.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(ips); /對(duì)InputStream進(jìn)行包裝,增加了緩存OutputStream ops = s.getOutputStream();ops.write(hello,World!.getBytes();System.out.println(br.readLine();br.close(); /關(guān)閉包裝類,會(huì)自動(dòng)關(guān)閉里面的基類ops.close();s.close();ss.close();再次使用telnet工具可以看到,這次可以發(fā)送不止一個(gè)字符了,按回車鍵后發(fā)送數(shù)據(jù)到服務(wù)器端.2.5,TCP程序例子客戶端程序:import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import .InetAddress;import .Socket;public class TcpClient pu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 火災(zāi)生產(chǎn)恢復(fù)應(yīng)急預(yù)案(3篇)
- 制定適合2025年的公司戰(zhàn)略與風(fēng)險(xiǎn)管理常識(shí)試題及答案
- 城軌火災(zāi)專項(xiàng)應(yīng)急預(yù)案(3篇)
- 計(jì)算機(jī)軟件技術(shù)員試題及答案分析指導(dǎo)
- 火災(zāi)觸電應(yīng)急預(yù)案范文(3篇)
- 《機(jī)電一體化設(shè)備安裝與調(diào)試》課件-學(xué)習(xí)情景九 組態(tài)軟件在機(jī)電一體化設(shè)備上和自動(dòng)生產(chǎn)線上的應(yīng)用
- 高考作文與文化自信的表達(dá)探討試題及答案
- VB編程的藝術(shù)與試題及答案的提升
- 2025年VB考試經(jīng)驗(yàn)分享與試題答案
- VB編程思維試題及答案
- 預(yù)收貨款協(xié)議合同
- 急性心肌梗死診斷和治療
- 2025年武漢鐵路局集團(tuán)招聘(180人)筆試參考題庫(kù)附帶答案詳解
- 殯葬人員勞務(wù)合同協(xié)議
- 北京開放大學(xué)2025年《企業(yè)統(tǒng)計(jì)》形考作業(yè)3答案
- 國(guó)內(nèi)外著名幼兒教育家及其教育理念
- 2025年大數(shù)據(jù)分析師職業(yè)技能測(cè)試卷:數(shù)據(jù)倉(cāng)庫(kù)設(shè)計(jì)與數(shù)據(jù)建模實(shí)戰(zhàn)試題匯編
- 浙江省寧波市2024學(xué)年第二學(xué)期高考與選考模擬考試化學(xué)試卷及答案(寧波二模)
- 造價(jià)咨詢進(jìn)度管理制度
- 初中防電信詐騙課件
- 第六單元名著導(dǎo)讀《鋼鐵是怎樣煉成的》課件【知識(shí)精研】統(tǒng)編版語(yǔ)文八年級(jí)下冊(cè)
評(píng)論
0/150
提交評(píng)論