網(wǎng)絡(luò)編程(接口socket)_第1頁
網(wǎng)絡(luò)編程(接口socket)_第2頁
網(wǎng)絡(luò)編程(接口socket)_第3頁
網(wǎng)絡(luò)編程(接口socket)_第4頁
網(wǎng)絡(luò)編程(接口socket)_第5頁
免費預(yù)覽已結(jié)束,剩余10頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、使用Java語言還可以編寫底層的網(wǎng)絡(luò)通信程序,這是通過包中提供的Socket類以及ServerSocket等類實現(xiàn)的。本章討論如何通過 socket使用TCP/IP或UDP協(xié)議實 現(xiàn)在網(wǎng)絡(luò)上兩個程序間建立連接并交換數(shù)據(jù)。Java套接字編程機器標(biāo)識連接到Internet上的計算機使用IP地址或域名來唯一標(biāo)識一臺計算機,在局域網(wǎng)上的計算機則可以使用名稱標(biāo)識。要實現(xiàn)網(wǎng)絡(luò)通信,首先需要知道計算機的地址。在包中提供了 InetAddress類對象來表示計算機地址。InetAddress類沒有提供構(gòu)造方法,要得到一個InetAddress類對象,需要使用該類的靜態(tài)方法。 public static Ine

2、tAddress getByName(String host)返回給定主機名或點分十進制表示的主機的IP地址。 public static InetAddress口 getAllByName(String host)返回給定主機名或點分十進制表示的主機的所有IP地址數(shù)組。 public static InetAddress getLocalHost() 返回本地主機的 IP 地址。上述方法在指定的主機未知時將拋出UnknownHostException異常。InetAddress類其他方法: public String getHostName()返回該IP地址的主機名字符串。 public S

3、tring getHostAddress() 返回主機 IP 地址的字符串。 public byte口 getAddress() 返回四個元素的表示IP地址的字節(jié)數(shù)組。下面程序通過命令行給出一臺主機的域名,程序?qū)⑤敵鲈摍C器的網(wǎng)絡(luò)地址。程序 GetIPAddress.java import .*;public class GetIPAddresspublic static void main(String args) throws Exceptionif(args.length!=1)System.out.println("Usage:GetIPAddress DomainName&q

4、uot;);System.exit; InetAddress address = InetAddress.getByName(args0);System.out.println(address);System.out.println("Name:"+address.getHostName();System.out.println("Address:"+address.getHostAddress(); 要運行該程序,機器必須連到網(wǎng)絡(luò)上。下面是程序運行的一個結(jié)果:包命等奘示苻Ge 11 PftdldrE4i s - JayaC:X>java |Get

5、iPAddi*e&G i-mjw = «cnuw. bhu B edu.c"21m7 . 176 . 3Naoe;ww/bhu.ediucn1Address:210.47 -176.3C:>.I 產(chǎn)圖GetIPAddress程序的運行結(jié)果套接字通信在網(wǎng)絡(luò)上,很多應(yīng)用都是采用客戶/服務(wù)器(C/S)結(jié)構(gòu)的。實現(xiàn)網(wǎng)絡(luò)通信必須將兩臺機器連接起來建立一個雙向通信鏈路,這個雙向通信鏈路的每一端稱為一個套接字(socket)。1 .套接字的構(gòu)成我們知道,在Internet上可以使用IP地址唯一標(biāo)識一臺主機。但一臺主機可能提供多種 服務(wù),而僅用IP地址還不能唯一

6、標(biāo)識一個服務(wù)。因此通常使用一個整數(shù)來標(biāo)識該機器上的某個服務(wù),這個整數(shù)就是端口號(port)。端口號是用16位整數(shù)標(biāo)識,共有65536個端口號。端口號并不是機器上實際存在的物理位置,而是一種軟件上的抽象。端口號分為兩類。一類是由因特網(wǎng)名字和號碼指派公司ICANN分配給一些常用的應(yīng)用層程序固定使用白熟知端口( well-known port),其數(shù)值為11024。例如HTTP服務(wù)的端口 號為80, FTP服務(wù)的端口號為 21。表1列出了幾種常用的熟知端口號。表1常用服務(wù)的端口號服務(wù)FTPTelnetSMTPDNSHTTPSNMP端口號2123255380161另一類端口為一般端口,用來隨時分配給請

7、求通信的客戶進程。為了在通信時不致發(fā)生混亂,就必須把端口號和主機的IP地址結(jié)合在一起使用。一個TCP連接由它的兩個端點來標(biāo)識,而每一個端點又是由IP地址和端口號決定的。TCP連接的端點稱為套接字(socket),套接字是由IP地址和端口號構(gòu)成的,如圖2所示:IP地址端口號圖2套接字的構(gòu)成這里,3為IP地址,1500為端口號,因此套接字為3, 1500。2 .套接字通信與套接字類一般來說,運行在一臺特定機器上的某個服務(wù)器(如HTTP服務(wù)器)都有一個套接字綁定到該服務(wù)器上。服務(wù)器只是等待、監(jiān)聽客戶的連接請求。在客戶端,客戶機需要知道運行服務(wù)器的主機名和端口號

8、。為了建立連接請求, 客戶機試圖與服務(wù)器機器上的指定端口號上的服務(wù)連接,這個請求過程如圖3所示:seiver圖3客戶向服務(wù)器請求連接client如果正常,服務(wù)器將接受連接請求。一旦接受了請求,服務(wù)器將創(chuàng)建一個新的綁定到另 一個端口號的套接字, 然后使用該套接字與客戶通信。 這樣,服務(wù)器可以使用原來的套接字 繼續(xù)監(jiān)聽連接請求,如圖 4所示。圖4服務(wù)器接受客戶的連接在客戶端,如果連接被接受,就會創(chuàng)建一個套接字(socket),客戶就可以使用該套接字與服務(wù)器通信。注意,客戶端的套接字并沒有綁定到與服務(wù)器連接的端口號上,相反客戶被指定客戶程序所在機器上的一個端口號上。現(xiàn)在客戶與服務(wù)器就可以讀寫套接字進

9、行通信 了。為了實現(xiàn)套接字通信,在 包中提供了兩個類:Socket和ServerSocket。它們分別實現(xiàn)連接的客戶端和服務(wù)器端的套接字。Socket類的常用構(gòu)造方法: public Socket (String host, int port) throws UnknownHostException , lOException 創(chuàng)建 一個流式套接字對象并將其連接到命名主機的指定端口上。host為主機名,port為端口號。 public Socket (InetAddress address, int port) throws IOException 創(chuàng)建一個流式套接 字對象并將其連接到指定IP

10、地址的指定端口上。address為主機的IP地址,port為端口號。 public Socket (String host, int port, InetAddress localAddr, int localPort) throws IOException public Socket (InetAddress address, int port, InetAddress localAddr, int localPort) throws IOExceptionSocket類提供的主要方法有: public InetAddress getInetAddress() 返回該套接字所連接的IP 地址

11、。 public int getPort()返回該套接字所連接的遠程端口號。 public synchronized void close() throws IOException 關(guān)閉套接字對象。 public InputStrean getInputStream() throws IOException 獲得套接字綁定的數(shù)據(jù)輸入 public OutputStream getOutputStream() throws IOException 獲得套接字綁定的數(shù)據(jù) 輸出流。ServerSocket類用在服務(wù)器端。客戶與服務(wù)器通信,客戶向服務(wù)器提出請求,服務(wù)器監(jiān) 聽請求,一旦監(jiān)聽到客戶請求,服

12、務(wù)器也要建立一個套接字。這可通過ServerSocket類實現(xiàn)。ServerSocket類的構(gòu)造方法如下: ServerSocket(int port)創(chuàng)建綁定到指定端口port上的服務(wù)器套接字。 ServerSocket(int port ,int backlog) 參數(shù)backlog指定最大的隊列數(shù),即服務(wù)器所能支持的最大連接數(shù)。 ServerSocket(int port ,int backlog, InetAddress bindAddr)參數(shù) bindAddr 為所綁定的 地址。上面的構(gòu)造方法都聲明了拋出©Exception異常,因此創(chuàng)建對象時應(yīng)該捕獲異常或聲明拋出異常。注

13、意,因為有些端口號已被特殊的服務(wù)占用,所以應(yīng)該選擇大于1024的端口號。ServerSocket類提供的主要方法: public Socket accept。throws IOException 該方法是 ServerSocket 類的重要方法,調(diào) 用該方法將阻塞當(dāng)前系統(tǒng)服務(wù)線程,直到有客戶連接。當(dāng)有客戶連接時,該方法返 回一個Socket對象。正是通過該 Socket對象,服務(wù)器才可以與客戶通信。 public void close() throws IOException 關(guān)閉 ServerSocket對象。3. 一個簡單的客戶和服務(wù)器通信的實例無論一個套接字的通信功能多么齊全、程序多么復(fù)

14、雜,其基本結(jié)構(gòu)都是一樣的,都包括以下四個基本步驟:(1)創(chuàng)建socket對象;(2)打開連接到socket的輸入輸出流;(3)按照一定協(xié)議對 socket進行讀寫操作;(4)關(guān)閉 socketo圖5說明了服務(wù)器和客戶端所發(fā)生的動作。服務(wù)器端ServerSocket(port #) ss.accept() 得到socket對象OutputStreamInputStream close()客戶端Socket(host,port #)得到socket對象OutputStreamInputStreamclose()圖5通信雙方建立連接的過程在服務(wù)器端,首先指定一個端口號,創(chuàng)建一個ServerSocke

15、t對象。然后調(diào)用 accept()方法等待客戶連接。如果客戶請求一個連接,服務(wù)器使用accept()方法將返回一個Socket對象。在客戶端,用指定的服務(wù)器主機名或IP地址及端口號創(chuàng)建一個 Socket對象,該對象試圖連接到指定主機指定端口的服務(wù)。當(dāng)兩端都返回Socket對象后,就可以分別在 Socket對象上調(diào)用 getInputStream()和getOutputStream()方法,得到輸入輸出流對象。這里要注意,服務(wù)器端的輸出流對應(yīng)于客戶 端的輸入流,服務(wù)器端的輸入流對應(yīng)于客戶端的輸出流。雙方建立了輸入輸出流后就可以進行通信了。最后,通信結(jié)束應(yīng)該調(diào)用close()方法關(guān)閉套接字,釋放連

16、接的資源。下面是一個簡單的字符界面的聊天程序。在服務(wù)器端使用端口號4700創(chuàng)建服務(wù)器套接字。服務(wù)器端程序如下:程序 ServerDemo.javaimport java.io.*;import .*;public class ServerDemopublic static void main(String args口兒tryServerSocket server = new ServerSocket(4700);Socket socket = server.accept();String line;BufferedReader is = new BufferedReader(new Input

17、StreamReader( socket.getInputStream();PrintWriter os = new PrintWriter( socket.getOutputStream();BufferedReader sin = new BufferedReader(new InputStreamReader( System.in);System.out.println("Client:"+ is.readLine();System.out.print("Server:");line=sin.readLine();while(!line.equal

18、s("bye")os.println(line);os.flush();System.out.println("Client:"+is.readLine();System.out.print("Server:");line=sin.readLine();sin.close();os.close();is.close();socket.close();server.close();catch(Exception e)System.out.println("Error:"+e);客戶端端程序如下:程序 ClientDe

19、mo.javaimport java.io.*;import .*;public class ClientDemopublic static void main(String args口兒trySocket socket=new Socket(" server",4700);BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream();PrintWriter os=new PrintWriter(socket.getOutputStream();BufferedReade

20、r sin=new BufferedReader(new InputStreamReader(System.in);String readline;System.out.print("Client:");readline=sin.readLine();while(!readline.equals("bye")os.println(readline);os.flush();System.out.println("Server:"+is.readLine();System.out.print("Client:");re

21、adline=sin.readLine();sin.close();os.close();is.close();socket.close();catch(Exception e)System.out.println("Error:"+e);該程序首先建立一個 Socket對象,其中“server”為服務(wù)器機器名,4700為服務(wù)器提供 連接服務(wù)的端口號。如果在一個機器上測試該程序,可以將“ server”改為所在機器的名稱 或使用“l(fā)ocalhost”,也可以使用“ ”地址。要測試該程序,應(yīng)該首先運行服務(wù)器程序,然后運行客戶程序,并且客戶程序先向服務(wù)器發(fā)送消

22、息。圖6和7分別給出了該程序的運行效果。圖6服務(wù)器端程序運行效果Clientare 叩u?SeFwei*'Fine.yen!Client-I 口I 乂 I圖7客戶端程序運行效果4.為多個客戶提供服務(wù)在上面的例子中,服務(wù)器只能為一個客戶提供服務(wù)。在實際應(yīng)用中,往往是在服務(wù)器機器上運行一個服務(wù)器,它接收來自其他多個客戶的請求,為多個客戶提供服務(wù)。下面程序提供的功能是客戶程序向服務(wù)器發(fā)送一個表示圓的半徑的數(shù),服務(wù)器為其計算圓的面積并將計算結(jié)果發(fā)送給客戶。這里為實現(xiàn)服務(wù)器為多個客戶服務(wù),使用了多線程的機制。下面是服務(wù)器端程序:程序 MultiThreadServer.javaimport ja

23、va.io.*;import .*;public static voidmain(String口args)tryServerSocket serverSocket = new ServerSocket(8000);int clientNo=1;while(true)Socket connectToClient = serverSocket.accept();System.out.println("Start thread for client "+clientNo);InetAddress clientInetAddress = connectToClient.getIne

24、tAddress();System.out.println("Client "+clientNo+" 's host name is " +clientInetAddress.getHostName();System.out.println("Client "+clientNo+" 's IP address is " +clientInetAddress.getHostAddress();HandleClient thread = new HandleClient(connectToClient)

25、; thread.start();clientNo+;catch(IOException ex) System.err.println(ex);class HandleClient extends Threadprivate Socket connectToClient;public HandleClient(Socket socket) connectToClient = socket;public void run()tryDataInputStream isFromClient = new DataInputStream( connectToClient. getInputStream(

26、);DataOutputStream osToClient = new DataOutputStream( connectToClient. getOutputStream();while(true)double radius = isFromClient.readDouble();System.out.println("radius received from client:"+radius); double area = radius*radius*Math.PI;osToClient.writeDouble(area);osToClient.flush();Syste

27、m.out.println("Area is:"+area);catch(IOException ex)System.err.println(ex);下面是客戶端程序:程序 Client.javaimport java.io.*;import .*;import java.util.*;public class Clientpublic static voidmain(String口args)trySocket connectToServer = new Socket("localhost",8000);DataInputStream isFromSer

28、ver = new DataInputStream( connectToServer.getInputStream();DataOutputStream osToServer = new DataOutputStream( connectToServer.getOutputStream();while(true)System.out.print("Please input a radius:");Scanner sc = new Scanner(System.in);double radius = sc.nextDouble();osToServer.writeDouble

29、(radius);osToServer.flush();double area = isFromServer.readDouble();System.out.println("Area received from server:"+area); catch(IOException ex)System.err.println(ex);該程序的運行結(jié)果如圖 6和7所示:圖6服務(wù)器端程序運行效果圖7客戶端程序運行效果數(shù)據(jù)包通信上一節(jié)講的socket通信是一種流式通信,本節(jié)討論通過socket實現(xiàn)數(shù)據(jù)包通信。1流式通信和數(shù)據(jù)包通信當(dāng)編寫網(wǎng)絡(luò)程序時,有兩種通信可供選擇:流式通信和數(shù)據(jù)

30、包通信。流式通信使用TCP(Transfer Control Protocol)協(xié)議,該協(xié)議是面向連接的協(xié)議。使用這 種協(xié)議要求發(fā)送方和接收方都要建立socket連接,一旦兩個 socket建立起來,它們就可以進行雙向通信,雙方都可以發(fā)送和接收數(shù)據(jù)。數(shù)據(jù)包通信使用用戶數(shù)據(jù)包協(xié)議UDP(User Datagram Protocol),該協(xié)議是一種無連接的協(xié)議。使用這種協(xié)議通信,每個數(shù)據(jù)包都是一個獨立的信息單元,它包括完整的目的地址, 數(shù)據(jù)包在網(wǎng)絡(luò)上以任何可能的路徑傳往目的地,因此數(shù)據(jù)能否到達目的地、到達的時間以及內(nèi)容的正確性都是不能保證的,該協(xié)議提供的是不可靠的服務(wù)。在網(wǎng)絡(luò)的傳輸層既然提供了兩種

31、協(xié)議,那么在實際的應(yīng)用中到底應(yīng)該使用哪種協(xié)議?這要取決于不同的應(yīng)用情況,下面是兩種協(xié)議的比較:使用UDP時,每個數(shù)據(jù)包都給出了完整的地址信息,因此無需建立發(fā)送方和接收方的連接。對于TCP,由于它是一個面向連接的協(xié)議,在通信之前必須建立雙方的連接,因此在TCP中多了一個建立連接的時間。使用UDP傳輸數(shù)據(jù)時是有大小限制的,每個數(shù)據(jù)包必須不大于64KB。而使用TCP就沒有這方面的限制,一旦連接建立起來,就可以傳輸大量的數(shù)據(jù)。UDP是不可靠的協(xié)議,發(fā)送方發(fā)送的數(shù)據(jù)不一定以相同的次序到達接收方。而TCP是可靠的協(xié)議,它確保接收方完全正確地獲取發(fā)送方所發(fā)送的數(shù)據(jù)。TCP使用較廣泛,如TELNET遠程登錄、

32、FTP文件傳輸都需要不定長度的數(shù)據(jù)可靠 地傳輸,因此需要使用 TCP協(xié)議。相比之下 UDP比較簡單,而且僅需要較少的監(jiān)護,因此 常用于局域網(wǎng)分散系統(tǒng)中的 client/server應(yīng)用程序。2 DatagramSocket 和 DatagramPacket 包提供了 DatagramSocket 類和 DatagramPacket 類,DatagramSocket 用于在程序 之間建立傳送數(shù)據(jù)包的通信連接, DatagramPacket則用來表示一個數(shù)據(jù)包。 利用這兩個類程 序員可以很方便地編寫使用 UDP協(xié)議的socket客戶和服務(wù)器通信程序。1. DatagramSocket 類Datag

33、ramSocket類的構(gòu)造方法有: public DatagramSocket(int port) throws SocketException創(chuàng)建一個數(shù)據(jù)包套接字,并將它綁定在本地主機指定的的端口上。 public DatagramSocket。throws SocketException 創(chuàng)建一個數(shù)據(jù)包套接字,并將它綁 定在本地主機一個可用的端口上。DatagramSocket類的常用方法有: public void receive(DatagramPacket p) throws IOException該方法用來接收一個報文, 參數(shù)p用來保存接收的報文。 該方法會阻塞接收者, 直到有 一

34、個報文到達套接字。 為了防止對方由于某種原因可能使接收者永遠阻塞,一般接收者設(shè)置一個計時器,如果收不到對方報文,計時器結(jié)束,接收者會作出處理。 public void send(DatagramPacket p) throws IOException該方法用來發(fā)送一個報文,參數(shù) p保存了要發(fā)送的報文。報文包括數(shù)據(jù)、接收者的IP地址及其端口。2. DatagramPacket 類DatagramPacket類的構(gòu)造方法有:ppublic DatagramPacket(byte口 buf, int length)參數(shù)buf為數(shù)據(jù)包文緩沖區(qū),length為緩沖區(qū)的長度。該構(gòu)造方法創(chuàng)建的對象用于接收

35、數(shù)據(jù)包。在接受數(shù)據(jù)之前,應(yīng)該使用該構(gòu)造方法創(chuàng)建一個DatagramPacket對象,給出接收數(shù)據(jù)的緩沖區(qū)及長度。然后調(diào)用DatagramSocket的receive。方法等待數(shù)據(jù)包的到來,receive。方法將一直等待,直到有一個數(shù)據(jù)包到來。例如:DatagramPacket packet = new DatagramPacket(buf,1024);socket.receive(packet); public DatagramPacket(byte buf, int length, InetAddress address, int port)參數(shù)buf為數(shù)據(jù)包文緩沖區(qū),length為緩沖區(qū)的

36、長度,address為接收方的地址,port為 接收方數(shù)據(jù)包套接字綁定的端口號。該構(gòu)造方法創(chuàng)建的對象用于發(fā)送數(shù)據(jù)包。在發(fā)送數(shù)據(jù)前,也要生成一個新的一個 DatagramPacket對象,在給出發(fā)送方的數(shù)據(jù)緩 沖區(qū)及長度的同時,還要給出完整的目標(biāo)地址,包括 IP地址和端口號。發(fā)送數(shù)據(jù)是通過 DatagramSocket的send()方法實現(xiàn)的,send()方法根據(jù)目的地址選擇路徑,以傳送數(shù)據(jù)包。 例如:DatagramPacket packet = new DatagramPacket(msg, send.length(), clientIP, clientPort);socket.send(p

37、acket);DatagramPacket類的常用方法有: public InetAddress getAddress()獲得報文發(fā)送者的IP 地址。 public int getPort()獲得報文發(fā)送者的端口。 public int getLength()返回發(fā)送或接收的數(shù)據(jù)長度。 public byte getData() 返回數(shù)據(jù)緩沖區(qū)。3 一個簡單的數(shù)據(jù)包通信的例子用數(shù)據(jù)包編寫客戶/服務(wù)器程序時,無論是客戶方還是服務(wù)器方,首先都要建立一個 DatagramSocket對象,用來接收或發(fā)送數(shù)據(jù)包,然后使用DatagramPacket類對象作為傳輸數(shù)據(jù)的載體。下面的實例通過 UDP實現(xiàn)通

38、信。該實例實現(xiàn)的功能是客戶端向服務(wù)器端發(fā)送一個字符 串,服務(wù)器端接收該字符串,然后將其轉(zhuǎn)換成大寫字母,再發(fā)送到客戶端。1 .服務(wù)器方的實現(xiàn)程序 UDPServer.javaimport .*;import java.io.*;public class UDPServerpublic static void main(String args口兒byte buf = new byte1024;tryDatagramSocket socket = new DatagramSocket(8888);System.out.println("Server is waiting.");w

39、hile(true)用于接收數(shù)據(jù)的數(shù)據(jù)包DatagramPacket packet = new DatagramPacket(buf,1024);socket.receive(packet);String data = new String(buf,0,packet.getLength();if(data.equals("bye")break;System.out.println("Client said:"+data);String send = data.toUpperCase();InetAddress clientIP = packet.getA

40、ddress();int clientPort = packet.getPort();byte口 msg = send.getBytes();用于發(fā)送數(shù)據(jù)的數(shù)據(jù)包DatagramPacket sendPacket = new DatagramPacket( msg,send.length(),clientIP,clientPort);socket.send(sendPacket);socket.close();System.out.println("Server is closed.");catch(Exception e)e.printStackTrace();2 .客戶

41、方的實現(xiàn)程序 UDPClient.javaimport .*;import java.io.*;public class UDPClientpublic static void main(String args口兒byte bufsend = null;String sendMessage = null;tryDatagramSocket socket = new DatagramSocket();BufferedReader sysin = new BufferedReader( new InputStreamReader(System.in);while(true)System.out.p

42、rintln("Waiting for input a line text."); sendMessage = sysin.readLine();bufsend = sendMessage.getBytes();用于發(fā)送數(shù)據(jù)的數(shù)據(jù)包DatagramPacket packet = new DatagramPacket( bufsend,sendMessage.length(), InetAddress.getLocalHost(),8888);socket.send(packet);if(sendMessage.equals("bye") break;by

43、te bufrec=new byte1024;用于接收數(shù)據(jù)的數(shù)據(jù)包DatagramPacket receivePacket = new DatagramPacket(bufrec,1024);socket.receive(receivePacket);String received = new String(receivePacket.getData();System.out.println("From Server:"+received);socket.close();catch(Exception e) e.printStackTrace();該程序的運行結(jié)果如圖 8和

44、9所示:-joljdL :Fi. 1 a-sMiikoi- S e £tw u"a JCr nt or ¥3 liScrwcr is wait.Client said:what you see is uhat you get«圖8服務(wù)器端程序運行效果二:¥ i. lasMinox- S e £ tv ua A JCi- ih nt or IT3 li-glxlWait ingi for input a line text.what von see is what you get. Fn Server=WMftT YOU SEE IS

45、UHftT VOU GET,圖9客戶端程序運行效果作業(yè):3 .簡述什么是套接字?它由哪些部分組成?它有什么作用?4 .套接口是為下面哪一項編碼?()A.端口號B. IP地址C.端口號和IP地址D.都不是5 .為了等待客戶的一個連接請求,服務(wù)器應(yīng)該使用下面哪個類?()A. SocketB. SocketServerC. ServerD. URL6 .當(dāng)使用帶一個主機地址參數(shù)的構(gòu)造方法創(chuàng)建一個新的Socket實例時:(A. Java試圖在Internet上建立一個與該主機的連接。B. Java啟動一個運行在該主機上的一個服務(wù)器。C.直到調(diào)用了 Socket的accept。方法,否則什么也不會發(fā)生。

46、A. sock.accept();C. sock.getOutputStream();7. 對一個給定的 Socket對象sock,為了獲得一個輸出流,下面哪個語句是正確的? )B. sock.getDataOutputStream();D. new DataOutputStream(sock);8. ServerSocket的accept。方法返回的類型是()。A. SocketB.ServerSocketC. ServerD.URL9. TCP 主要用于() 。A. 在 Internet 上標(biāo)識基于點分十進制的地址或域名。B. 保證數(shù)據(jù)包按照發(fā)送的順序到達。C. A 和 B 都正確D. A 和 B 都不正確12.利用Java的JFrame類實現(xiàn)一個圖形用戶界面的程序,它的功能是接受用戶輸入的 一個主機名,利用InetAddress 類查找出它的IP 地址并顯示出來。14. 利用 Socket 類和 ServerSocket 類編寫一對客戶機/服務(wù)器程序,建立套接字通信管道,并將一個文件從一臺機器傳到另一臺機器。17分析以下網(wǎng)絡(luò)通信多線程程序功能。/SocketServer.javaimport .*;import java.io.*;public class

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論