Java中的TCPUDP網(wǎng)絡(luò)通信編程.docx_第1頁(yè)
Java中的TCPUDP網(wǎng)絡(luò)通信編程.docx_第2頁(yè)
Java中的TCPUDP網(wǎng)絡(luò)通信編程.docx_第3頁(yè)
Java中的TCPUDP網(wǎng)絡(luò)通信編程.docx_第4頁(yè)
Java中的TCPUDP網(wǎng)絡(luò)通信編程.docx_第5頁(yè)
已閱讀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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論