




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Java網絡編程期末復習題(I/O、多線程、網絡編程、數據庫操作)
一、單選題
1、下列關于Java線程的說法那些是正確的()
A、每一個Java線程可以看成由代碼、一個真實的CPU以與數據三部份
組成。
B、創建線程的兩種方法中,從Thread類中繼承的創建方式可以防止出
現多父類問題。
C、Thread類屬于java.util程序包°
D、以上說法無一正確。
2、運行下列程序,會產生什么結果?()
publicclassXextendsThreadimplementsRunable{
publicvoidrun(){
System.out.println("thisisrun()");
}
publicstaticvoidmain(Stringargs[]){
Threadt=newThread(newX());
t.startQ;
)
)
A、第一行會產生編譯錯誤
B、第六行會產生編譯借誤
C、第六行會產生運行錯誤
D、程序會運行和啟動
3、下列選項中,用于定義接口的關鍵字是()
A、import
B、implements
C、interface
D、protected
4.定義類頭時能運用的修飾符是()o
A)privateB)staticC)abstractD)protected
5、下面哪個方法不行以在任何時候被任何線程調用?()
A、wait()
B>sleepO
C、yield()
D、synchronized(this)
6.下列關于線程優先級的說法中,正確的是
A)線程的優先級是不能變更的
B)線程的優先級是在創建線程時設置的
C)在創建線程后的任何時候都可以設置
D)B和C
7.線程生命周期中正確的狀態是
A)新建狀態、運行狀態和終止狀態
B)新建狀態、運行狀態、堵塞狀態和終止狀態
C)新建狀態、可運行狀態、運行狀態、堵塞狀態和終止狀態
D)新建狀態、可運行狀態、運行狀態、復原狀態和終止狀態
8.Thread類中能運行線程體的方法是
A)start()B)resume()
C)init()D)run()
9在程序讀入字符文件時,能夠以該文件作為干脆參數的類是
A)B)BufferedReader
C)D)ObjectinputStrearn
10)java.io包的File類是
A)字符流類B)字節流類
C)對象流類D)非流類
11)下列描述中,正確的是
A)在Serializable接口中定義了抽象方法
B)在Serializable接口中定義了常量
C)在Serializable接口中沒有定義抽象方法,也沒有定義常量
D)在Serializable接口中定義了成員方法
12.java中用于創建文件對象的類是()
A.FileB.ObjectC.ThreadD.Frame
13.從鍵盤上輸入一個字符串創建文件對象,若要推斷該文件對象為書目
文件或數據文件,可運用下列哪個方法?()
A.getPath()B.getNameQC.isFileQD.isAbsolutef)
14.下列哪個類不對干脆創建對象?()
A,InputstreamB.C.BufferedlnputStreamD.
DatalnputStream
15.從鍵盤上輸入多個字符時,為了避開回車換行符的影響,須要運用下
列哪個流方法?()
A.write()B.flushf)C.close()D.skip()
16.以對象為單位把某個對象寫入文件,則須要運用什么方法?()
A.writelntf)BwriteObject()C.write()D.writUTFQ
17.下列哪個類的方法能夠干脆把簡潔數據類型寫入文件?()
A?OutputstreamB.BufferedWriterC.
ObjectOutputStream.D.
18.若一個類對象能被整體寫入文件,則定義該類時必需實現下列哪個接
口?()
A.RunnableB.ActionListenerC.WindowsAdapterD.
Serializable
19.下列哪種類型的數據能以對象的形式寫入文件?()
A.StringB.FrameC.DialogD.Button
20.File類的方法中,用于列舉某書目下的子書目與文件的方法是()
A.longlengthQB.longlastModifiedf)C.String[]list()D.
StringgetNameQ
21.能夠以字符串為單位寫入文件數據的流類是()
A.B.C.BufferedWriterC.Outputstream
22.能夠向文件輸入邏輯型數據的類是:()
A.B.OutputstreamC.D.DataOutputStream
23.在線程同步中,為了喚醒另一個等待的線程,運用下列方法()
A.sleepOB.wait()CnotifyOD.join()
24.為了得到當前正在運行的線程,可運用下列哪個方法?()
A.getNameQB.Thread.CurrentThread().B.sleepOD.
mn()
25.以下()不屬于線程的狀態。
A.就緒狀態Bo運行狀態Co掛起狀態Do獨占狀態
26.當線程被創建后,其所處的狀態是()
A.堵塞狀態Bo運行狀態C、就緒狀態D、新建狀態
27.當線程調用start。后,其所處狀態為()
A.堵塞狀態Bo運行狀態C、就緒狀態D、新建狀態
28.Thread.sleep()方法調用后,當等待時間未到,該線程所處狀態
為()
A.堵塞狀態Bo運行狀態C、就緒狀態D、新建狀態
29.新生狀態的線程其可能干脆進入的狀態是()
A.堵塞狀態B、運行狀態C、新建狀態D、結束狀態
30.Thread.sleep()方法調用后,當等待時間已到,該線程所處狀態
為()
A.堵塞狀態Bo運行狀態C、就緒狀態D、新建狀態
31.當線程因異樣而退出run。后,其所處狀態為()
A.堵塞狀態Bo運行狀態C、就緒狀態D、結束狀態
32.wait。方法首先是哪個類的方法?()
A.ObjectB.Thread.C.RunnableD.File
33.假如我們想實現“先把要寫入文件的數據先緩存到內存中,再把緩
存中的數據寫入文件中”的功能時,則須要運用下列哪個類?()
A.B.OutputStreamC.FilterOutputStreamD.
DataOutputStream
34.用read。方法讀取文件內容時,推斷文件結束的標記為()
A.0B.1C-1D.無標記
35.以下哪個方法只對運用了緩沖的流類起作用?()
A.read()B.write()Cskip()D.flushQ
36.Java供應的類InetAddress來進行有關Internet地址的操作.()
A.SocketB.ServerSocketC.DatagramSocketD
InetAddress
37.InetAddress類中哪個方法可實現正向名稱解析?()
A.isReachable()B.getHostAddress()C.getHosstName()
D.getByNameQ
38.為了獲得遠程主機的文件內容,當創建URL對象后,須要運用哪個
方法獲得信息()
A.getPortQB.getHostC.openStream()
D.openConnectionQ
39.java程序中,運用TCP套接字編寫服務端程序的套接字類是()
A.SocketB.ServerSocketC.DatagramSocket
D.DatagramPacket
40.ServerSocket的監聽方法accept。的返回值類型是()
A.voidB.ObjectC.SocketD.DatagramSocket
41.ServerSocket的getlnetAddress。的返回值類型是()
A.SocketBServerSocketD.InetAddressD,.URL
42.當運用客戶端套接字Socket創建對象時,須要指定()
A.服務器主機名稱和端口B、服務器端口和文件C、服務器名
稱和文件
D.服務器地址和文件
43.運用流式套接字編程時,為了向對方發送數據,則須要運用哪個方法
()
A.getlnetAddressf)B.getLocalPort()C.getOutputStrearn()
D.getlnputStreaml)
44.運用UDP套接字通信時,常用哪個類把要發送的信息打包?()
A.StringB.DatagramSocketC.MulticastSocket
D.DatagramPacket
45.運用UDP套接字通信時,哪個方法用于接收數據()
A.read()B.receive()C.accept()D.Listen()
46.若要取得數據包的中源地址,可運用下列哪個語句()?
A.getAddress()B.getPort()C.getNameQD.getDataQ
47.要運用java程序訪問數據庫,則必需首先與數據庫建立連接,在建
立連接前,應加載數據庫驅動程序,該語句為()
AClass.forNamef,sun.jdbc.odbc.JdbcOdbcDriver”)
B.DriverManage.getConnection(9999)
C.Resultrs=
DriverManage.getConnection(").createStatement()
D.Statementst=
DriverManage.getConnection("","”").createStaement()
48.要運用java程序訪問數據庫,則必需首先與數據庫建立連接,該語
句為()
AClass.forNamef"sun.jdbc.odbc.JdbcOdbcDriver”)
B.DriverManage.getConnection(
C.Resultrs=
DriverManage.getConnection(”).createStatement()
D.Statementst=
DriverManage.getConnection(""").createStaement()
49.java程序與數據庫連接后,須要查看某個表中的數據,運用下列哪
個語句?()
A.executeQueryOB.executeUpdateQCexecuteEdit()
D.executeSelect()
50.java程序與數據庫連接后,須要查看某個表中的數據,運用下列哪
個語句?()
A.executeQueryOB.executeUpdate()CexecuteEdit()
D.executeSelect()
二、填空題
1.StdoutSystem.out作為PrintStream的實例,來實現stdout,它
代表的是一屏幕
2.StdinSystem.in作為Inputstream類的一個實例來實現stdin,它
代表的是健盤,你可以運用其中兩個成員函數,read。讓你從輸入中讀一
個字節,skipQongn)讓你在輸入中跳過n個字節。
3.Java中的IO流分為兩種,一種是字節流,另一種是字符流,分別由
四個抽象類來表示(每種流包括輸入和輸出兩種所以一共四
個):InputStream,Outputstream,Reader,Writer。它們通過重載
read()和write()方法定義了6個讀寫操作方法。
4.File類不是一他襟型的I/O類,在java.io類庫中它是唯一的
non-streamm,既不能取文件內容,也不能修改文件內容,主要作
用是收集槽案(或目的相%J信息,例如:建立文件對象、修改文件名、
設置文件屬性、測試文件屬性
5.書目是一個包含其他文件和路徑列表的File類。當你創建一個File對
象且它是書目時,isDirectory()方法返回ture。這種狀況下,可以調用
該對象的String[]list()方法來提取該書目內部其他文件和書目的列表
6.全部的輸出過濾諭都是抽象類——的子類。
(FilterOutputStreain)
7、字符輸入流BufferedReader運用了一____技術。
(Printstream)
8、InputStreamReader負責將Inputstream轉化成Reader,而
OutputStreamWriter貝i]將Outputstream轉化成Writer。事實上是通
過byte[]和String來關聯。
9、設a.txt為當前書目下的一個文本文件,則以字符方式向該文件寫數
據時,須要建立的輸出流通道為:new("a.txt");
10.隨機訪問文件類是RandomAsessFile,它實現了與
DatalnputStream,DataOutputStream類同樣實現的接口Datalnput,
DataOutput.。
11.實現多線程的兩種方式是:1、繼承Thread類;2、實現Runnable
接口。
12、取得當前線程的語句是:Thread.currentThread();
13.主線程的名稱是main,默認創建的第一個子線程的名稱是
thread-O
14.可以調用Thread類的方法getPriority()和setPriority()來
存取線程的優先級,線程的優先級界于1(MINPRIORITY)和的
(MAXPRIORITY)之間,缺省是5(NORM_PRIORITY)。
15.(1)當多個線程同時運行時,會產生數據錯誤與其它沖突問題。Java
語言供應了線程同步限制機制,一是鎖定共享資源,使得在任何時
刻只有一個線程能夠訪問共享資源,以保持共享資源的完整和一樣,二是
讓相互通信的線程運行,以保證通信的正確性。
(2)線程之間的通信有兩種方法:一是把共享變量和方法封閉在一個類
中,二是利用系統方法和限制線程通信.實現對共享資源互
拆訪問的方法是在方法聲明中加入synchronized關健字來聲明一個訪問
共享資源的方法,或者通過synchronized關鍵字來聲明synchronized
塊。
16、守護線程一般被用于在后臺為其它線程供應服務。調用方法
isDaemonO來推斷一個線程是否是守護線程,也可以調用方法
setDaemon。將一個線程設為守護線程。
17、InetAddress是用于封裝IP地址和DNS的一個類。
18、TCP/IP套接字是最牢靠的雙向流協議。等待客戶端的服務器運用
Serversocket類,而要連接到服務器的客戶端則運用Socket類。
19、java.net包中供應了一個類MuIticastSocket,允許數據報以廣
播方式發送到該端口的全部客戶。
20.在TCP/IP協議的傳輸層除了TCP協議之外還有一個UDP協議。
幾個標準的應用層協議HTTP,…運用的都是TCP協議。UDP協議主要
用于須要很強的實時交互性的場合,如網絡游戲,視頻會議等
21、當我們得到一個URL對象后,就可以通過它讀取指定的WWW資
源。這時我們將運用URL的方法openStream。,其定義為:InputStream
openStrearn。;
22、URL的構造方法都聲明拋棄非運行時異樣
MalformedURLException,因此生成URL對象時,我們必需要對這一
例外進行處理,通常是用try-catch語句進行捕獲。
23、一個Statement對象,可以執行多個sql語句以后,批量更新。
這多個語句可以是delete、update、insert等或兼有
24、Java數據庫操作基本流程:取得數據庫連接、執行sql語句、處
理執行結果、釋放數據庫連接。
25、下列程序的功能是在監控臺上每隔一秒鐘顯示一個字符串
“Hello”,能夠填寫在程序中下劃線位置,使程序完整并能正確運行的語
句是
publicclassTestimplementsRunnable{
publicstaticvoidmainfStringargs[|){
Testt=newTest();
Threadtt=newThread(t);
tt.startQ;
)
publicvoidrun(){
for(;;){
try{
}catch(e){}
System.put.println("Hello");
答:Thread.sleep(l000)
InterruptedException
三、簡答與程序分析、填空、設計題
第一部分:簡答
1、線程的生命期內包括哪些狀態?
答:新建狀態、就緒狀態、運行狀態、堵塞狀態、死亡狀態
見下圖:各狀態之間的切換關系
2、什么是線程的新建狀態?
答:線程對象已經創建,還沒有在其上調用start。方法。
3、什么是線程的可運行狀態?
答:當線程有資格運行,但調度程序還沒有把它選定為運行線程時
線程所處的狀態。當start。方法調用時,線程首先進入可運行狀態。在線
程運行之后或者從堵塞、等待或睡眠狀態回來后,也返回到可運行狀態。
4、什么是線程的死亡態?
答:當線程的run()方法完成時就認為它死去。這個線程對象或許是
活的,但是,它已經不是一個單獨執行的線程。線程一旦死亡,就不能復
生。假如在一個死去的線程上調用start。方法,會拋出
java.lang.IllegalThreadStateException異樣。
5、調用join。方法有何作用?
答:保證當前線程停止執行,直到該線程所加入的線程完成為止。然
而,假如它加入的線程沒有存活,則當前線程不須要停止。
6.現有字符串S="hello,java!”,則以此字符串生成待發送
DatagramPacket包dgp的語句是:
答:
Byte[]str=s.getbytes();
DatagramPacketdgp=newDatagramPacket(str,
str.length(),目的主機,目的端口);
7、介紹運用javaSocket創建客戶端Socket的過程。
答:try{
Socketsocket=newSocket(目標主機,目標端口);
}catch(IOExceptione){
System.out.println("Error:H+c);
8、介紹運用javaServerSocket創建服務器端ServerSocket的過程。
答:
ServerSocketserver=null;
try{
server=newServerSocket(監聽端口);
(catch(IOExceptione){
System.out.println("cannotlistento:"+e);
}
Socketsocket=null;
try{
socket=server.accept();
}catch(IOExceptione){
System.out.println("Error:"+e);
9、寫出一種運用java流式套接式編程時,創建雙方通信通道的語句。
答:
PrintStreamos=newPrintStreamfnew
BufferedOutputStreem(socket.getOutputStream()));
DatalnputStreamis=new
DataInputStream(socket.getInputStream());
PrintWriterout=newPrintWriter(socket.getOutStream(),true);
BufferedReaderin=newButfferedReaderfnew
InputSteramReader(Socket.getInputStream()));
10、對于建立功能齊全的Socket,其工作過程包含以下四個基本的步驟:
(1)創建Socket;
(2)打開連接到Socket的輸入/出流;
(3)依據確定的協議對Socket進行讀/寫操作;
(4)關閉Socket.
11、簡述基于TCP與UDP套接字通信的主要區分
答:TCP,牢靠,傳輸大小無限制,但是須要連接建立時間,差錯限
制開銷大。
UDP,不行靠,差錯限制開銷較小,傳輸大小限制在64K以下,
不須要建立連接。
12、寫出DatagramSocket的常用構造方法:
答:
DatagramSocket();
DatagramSocket(intprot);
DatagramSocketfintport,InetAddressladdr)
port指明socket所運用的端口號,假如未指明端口號,則把socket
連接到本地主機上一個可用的端口。laddr指明一個可用的本地地址。
13>介紹一下DatagramPacket的常用構造方法:
DatagramPacket(bytebuf[],intlength);
DatagramPacketfbytebuf[],intlength,InetAddressaddr.int
port);
DatagramPacket(byte[]buf,intoffset,intlength);
DatagramPacket(byte[|buf,intoffset,intlength,
InetAddressaddress,intport);
其中,buf中存放數據報數據,length為數據報中數據的長度,addr
和port旨明目的地址,offset指明白數據報的位移量。
14、在接收端接收數據報的主要語句:
答:bytebuf[]=newbyte[n];
DatagramPacketpacket=newDatagramPacket(buf.n);
Socket.receive(packet);
15、寫出java程序中用Statement來執行sql杳詢與更新語句
Stringsql;〃表示查詢或更新的操作語句;
Statementsm=cn.createStatement();//cn表示數據庫連接
sm.executeQuery(sql);//執行數據查詢語句(select)
sm.executeUpdate(sql);//執行數據更新語句(delete、update、insert、
drop等)
statement.closeQ;
16.什么叫流?流式輸入輸出有什么特點?
17.Java流被分為字節流、字符流兩大流類,兩者有什么區分?
18.File類有哪些構造函數和常用方法?
電簽_所謂流是指同一臺計算機或網絡中不同計算機之間有序運動著的
數據序列,Java把這些不同來源和目標的數據都統一抽象為數據流。數
據流可分為輸入流和輸出流,輸入流代表從其他設備流入計算機的數據序
列,輸出流代表從計算機流向外部設備的數據序列。
流式輸入輸出的特點是數據的獲得和發送沿數據序列的依次進行,即每一
個數據都必需等待排在它前面的數據,等前面的數據讀入或送出之后才能
被讀寫。所以流和隊列一樣,只能以“先進先出”的方式對其中的數據進
行讀寫,而不能隨意選擇讀寫的位置。
17.答:兩者都作為Object類的干脆子類,基本輸入流(Inputstream)
和基本輸出流(Outputstream)是處理以8位字節為基本單位的字節流
類;Reader?和Writer類是特地處理16位字符流的類。
18.答:構造函數有:
(1)publicpathname):創建一個對應于參數pathname的File類
對象。參數pathname是包含書目和文件名的字符串。假如沒有文件名,
則代表書目。
(2)publicparent,Stringchild):該構造函數將pathname分成兩
部分parent和child,參數parent表示書目或文件所在路徑,參數child
表示書目或文件名稱。
(3)publicparent,Stringchild):該構造函數與上面一個不同在于
將parent的參數類型由String變為File,代表parent是一個已經創建
的File類文件對象(指向書目)。
常用方法有:
(1)publicbooleancanWrite():返[01文件是否可寫。
(2)publicbooleancanRead():返回文件是否可讀。
(3)publicbooleancreateNewFile():當文件不存在時創建文件。
19.位置指針的作用是什么?RandomAccessFile類供應了哪些方法實
現對指針的限制?
19.答:要實現對文件的隨機讀取,也就是在文件的任何位置執行讀寫數
據的操作,須要一個指針來指定讀寫的位置。在創建RandomAccessFile
類對象的同時,系統自動創建了一個指向這個文件開頭的指針,當執行讀
寫操作后,指針自動指向被讀寫數據之后的第一個字節處。指針初始值是
0,每讀/寫一個字節,指針自動增加loRandomAccessFile類供應了
一些限制指針移動的方法。
publiclongget。;獲得當前指針指向文件的位置。
pulbicvoidseek(longpos);將指針移動到參數pos指定的位置。
publicintskipBytesfintn);指針從當前位置向后移動n個字節位置,并
返回指針實際移動的字節數。
其次部分:分析程序功能或完成程序
2、利用文件輸入輸出流編寫一個實現文件拷貝的程序,源文件名和目標
文件名通過叮囑行參數傳入。
答:
importjava.io.*;
classCopyFile{
publicstaticvoidmain(String[]args){
String;
intch=0;
try{
[0];
[1];
fis=new(filel);
fos=new(file2);
while((ch=fis.read())!=-l)
fos.write(ch);
fis.closeQ;
fos.closeQ;
)
catch(e){
System.out.println("源文件沫找到!”);
}catch(ArrayIndexOutOfBoundsExceptione){
System.out.printin("缺少運行參數!”);
System.exit(-l);
catch(lOExceptione){
System.out.println(e.toStringO);
}
4、編寫一個程序,從鍵盤輸入一串字符,統計這串字符中英文字母、數
字、其他符號的字符數。
4.答:
importjava.io.*;
publicclassCount{
publicstaticvoidmain(String[]args)
{
intx=O,y=O,z=O;
intch;
try{
while((ch=System.in.read())!='\r'){
if(ch>='A'&&ch<=,Z,||ch>='a'&&ch<='z')
x++;
elseif(ch>='0'&&ch<='9')
y++;
else
z++;
}catch(IOExceptione){
System.out.println(e.toStringO);
)
System.out.printin("英文字母:"+x);
System.out.println("數字字符:"+y);
System.out.printing其它字符:"+z);
)
)
5.編寫一個程序,從鍵盤輸入一串字符,從屏幕輸出并將其存入a.txt
文件中。
5.答:
importjava.io.*;
publicclassInFile;
publicstaticvoidmain(String[]args)
|
intch;
try{
out=new("a.txt");
while((ch=System.in.read())!=,\r'){
System.out.write(ch);
out.write(ch);
out.closeQ;
System.out.write('\n,);
}catch(IOExceptione){
System.out.println(e.toStringO);
}
System.out.println("輸出至文件完畢!”);
)
)
8、下列程序向屏幕輸出文本文件內容:請完成所缺少的代碼
importjava.io.*;
classreadtxt
{
publicstaticvoidmain(String[]args){
try{
fl=newC'u.txt");
BufferedReaderbfl=newBufferedReader(f1);
Stringline;
line=bfl.readLinef);
while(Knel=nun)//推斷所讀的一行內容是否為空;
System.out.printin(line);
line=bfl?readLine();//接著讀入下一行
bfl.closeO;〃關閉文件的輸入流;
}catch(IOExceptione){e.printStackTrace();}
}}
10、請編寫java程序,訪問所在的主頁文件
答:publicclassURLReader{
publicstaticvoidmain(String[]argslthrowsException{/聲
明拋出全部例外
URLtire=newURL(叫;//構建一URL對象
BufferedReaderin=newBufferedReaderfnew
IiwutStreamReader(tirc.openStream()));
//運用openStream得到一輸入流并由此構造一個
BufferedReader對象
StringinputLine;
while((inputLine=in.readLineO)!=null)〃從輸入流不斷的讀
數據,直到讀完為止
System.outprintln(inputLine);//把讀入的數據打印到屏幕
上
in.close。;〃關閉輸入流
11、從鍵盤上輸入主機名稱,編寫類似ping的程序,測試連接效果。
import.*;
importjava.io.*;
classPing{
publicstaticvoidmain(String[]args)
{System.out.printin("請輸入ping主機名稱或地址:\n");
try{
Stringhost=keyreadline();
InetAddressip=InetAddress.getByName(host);
longtl=System.currentTimeMillisO;
if(ip.isReachable(5OOO))
{longt2=System.currentTimnMillis();
System.out.println("\nReplyfrom"+ip.getHostAddressQ+
time<=H+(t2-tl)+"ms");
System.out.println();
)
else{System.out.printlnf'Requesttimedout.");
}}
catch(lOExccptionc)
{System.out.printin("Requesttimedout.");}
privatestaticStringkeyreadlinef){
BufferedReaderbr=newBufferedReaderfnew
InputStreamReader(System.in));
Stringstr=null;
try{
str=br.readLinef);
}catch(lOExceptione){
e.printStackTraceQ;}
returnstr;
)
|
12、設服務器端程序監聽端口為8629,當收到客戶端信息后,首先推斷
是否是“BYE”,若是,則立刻向對方發送“BYE”,然后關閉監聽,結束
程序。若不是,則在屏幕上輸出收到的信息,并由鍵盤上輸入發送到對方
的應答信息。請編寫程序完成此功能。
mport.*;
importjava.io.*;
classServer{
publicScrvcr(){
try{
ServerSocketss=newServerSocket(8629);
System.out.println("服務器端已運行,等待客戶端連接:”);
Socketsocket=ss.accept。;//接收客戶端的連接請求;
BufferedReaderin=newBufferedReaderfnew
InputStreamReader(socket.getlnputStreamO));
PrintWriterout=new
PrintWriter(socket.getOutputStream。,true);
BufferedReaderbr=newBufferedReaderfnew
InputStreamReader(System.in));
Stringline;
while(true)
{line=(in.readLine().trim());
if(line?equals(”BYE"))
{out.println("BYE'^);
out.closeQ;
in.close();
socket.close();
br.closeQ;
ss.closeQ;
break;}
System.out.printing客戶輸入為:"+line);
System.out.println("請輸入回答:“);
line=br.readLine();〃從鍵盤上輸入信息;
out.println(line);//向對方發送信息
}}
catch(lOExceptione){}
)
publicstaticvoidmain(String[]args)throwsException!
newServerf);
}
}
13、TCP客戶端須要向服務器端8629發出連接請求,與服務器進行信
息溝通,當收到服務器發來的是“BYE”時,立刻向對方發送“BYE”,
然后關閉連接,否則,接著向服務器發送信息。
importjava.io.*;
import.*;
classClient2{
publicClient2()
{try
{Strings;
Socketsocket=newSocket("服務器地址”,8629);
BufferedReaderin=newBufferedReaderfnew
InputStreamReader(socket.getlnputStreamO));
PrintWriterout=new
PrintWriter(socketgetOutputStrearn。,true);
BufferedReaderline=newBufferedReaderfnew
InputStreamReader(System.in));
while(true)
{System.out.println("請向服務器輸出一條字符串:");
s=line.readLine();
out.println(s);〃向服務器發出信息;
s=in-readLineO.trim();//收到服務器發來的信
息;
System.out.println("服務器返回的信息是:");
System.out.println(s);
ifts.equalsC'BYE0))
{out.println(“BYE”);
line.closeQ;
out.closeQ;
in.closeQ;
socket.closeQ;break;}
catch(lOExccptionc){)
publicstaticvoidmain(String[]args){
newClient2();
})
14、UDP接收端
importjava.io.*;
import.*;
classServer{
publicstaticvoidmain(String[]args){
newUDPServer();}
}
classUDPServer{
publicUDPServerQ{
try{
DatagramSocketsocket=newDatagramSocket(1986);//建立
一個Socket連接
System.out.println("服務器IP:"+
InetAddress.getLocalHost().getHostAddress());//顯示服務器信息
while(true){
//接收
bytc[]instr=newbytc[200];
DatagramPacketreceive=newDatagramPacket(instr,
instr,length);
socket.receive(eeceive);//接收客戶機發過來的數據
Stringstr=newString(receive.getData());//提取數據
if(str.trim().equals("BYE"))
{socket.close();break;}
System.out.println("收到客戶端消息:"+str.trim。);//打印客戶
機消息
//發送
System.out.print("服務器發送消息:”);
str=newBufferedReaderfnew
InputStreamReader(System.in)).readLine();//得至!j輸入的數據
byte[]outstr=newbyte[str.length()];
outstr=str.getBytesQ;
Data
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論