總缺12 13講第11 11網(wǎng)絡編程_第1頁
總缺12 13講第11 11網(wǎng)絡編程_第2頁
總缺12 13講第11 11網(wǎng)絡編程_第3頁
總缺12 13講第11 11網(wǎng)絡編程_第4頁
總缺12 13講第11 11網(wǎng)絡編程_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第11章Android網(wǎng)絡編程TCP/IP基礎HTTP編程調用Web服務補充:socket編程11.1

TCP/IP基礎TCP:Transmission

Control

Protocol

傳輸控制協(xié)議IP:Internet

Protocol

因特網(wǎng)互聯(lián)協(xié)議TCP/IP協(xié)議定義了電子設備如何連入Internet,以及數(shù)據(jù)如何在它們之間進行傳輸?shù)臉藴?。TCP/IP協(xié)議是Internet最基本的協(xié)議,也是Internet的基礎。TCP/IP協(xié)議不只是TCP和IP這兩個協(xié)議,而是指整個TCP/IP協(xié)議族TCP/IP網(wǎng)絡層次結構這里的英文縮寫都是TCP/IP協(xié)議族的一員Socket編程和HTTP編程Socket編程HTTP編程(物理層)Socket概念網(wǎng)絡上的兩個應用程序之間的通信是分層進行的,socket是應用程序進行網(wǎng)絡通信的接口。Socket=主機地址+端口號關于端口號如果要發(fā)起網(wǎng)絡連接,不僅需要知道遠程機器的地址或名字。而且,還需要一個端口號??蛻舳撕头掌鞅仨毷孪燃s定所使 用的端口,如果系統(tǒng)兩部分所使用的端口不一致,那就不能進 行通信。 TCP/IP系統(tǒng)中的端口號是一個16位的數(shù)字,它的范圍是0~65535。實際上,小于1024的端口號保留給預定義的服務。Socket=主機地址+端口號HTTP概念HTTP:HyperText

Transfer

Protocol

超文本傳輸協(xié)議HTTP協(xié)議是互聯(lián)網(wǎng)上應用最多、最為廣泛的一種網(wǎng)絡協(xié)議。HTTP是一種是用于從WWW服務器傳輸超文本到本地瀏覽器的傳送協(xié)議。它可以使瀏覽器更加高效,使網(wǎng)絡傳輸減少。HTTP通信—HttpHTTP通信—HttpHttp采用請求/響應模型客戶端向服務器發(fā)送請求請求內容包含:請求的方法、URL、協(xié)議版本、請求修飾符、客 戶信息和內容的消息結構服務器端以一個狀態(tài)行作為響應響應的內容包括消息協(xié)議的版本、成功或者錯誤編碼、服務器信 息、實體元信息以及可能的實體內容最顯著的特點客戶端發(fā)送的每次請求都需要服務器回送響應請求結束后會主動釋放連接8HTTP通信—Http請求格式http請求格式[":"port][abs_path]http使用http作為通訊協(xié)議以定位網(wǎng)絡資源host合法的Internet主機域名或者IP地址端口指定訪問的主機端口號默認為80訪問地址指定訪問的主機資源URI9HTTP通信—Http的請求方法http的請求方法GET請求獲取Request-URI

所標識的資源;POST在Request-URI

所標識的資源后附加新的數(shù)據(jù);HEAD請求獲取由Request-URI

所標識的資源的響應消息報頭PUT請求服務器存儲一個資源,并用Request-URI

作為其標識DELETE請求服務器刪除Request-URI

所標識的資源;TRACE請求服務器回送收到的請求信息,主要用于測試或診斷CONNECT保留將來使用OPTIONS請求查詢服務器的性能,或者查詢與資源相關的選項和需求10HTTP通信—Http協(xié)議請求方法應用舉例:–

GET方法–

POST方法

GET

Host:

Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,

image/webp,*/*;q=0.8

POST

/inventory-check.cgi

HTTP/1.1

Host:

Content-Type:

text/plain

Content-length:

18

item=bandsaw

2647HTTP通信—Http響應HTTP響應也是由三個部分組成:狀態(tài)行、消息報頭、響應正文,一并發(fā)給客戶端,狀態(tài)行中包括狀態(tài)碼:1xx:指示信息--表示請求已接收,繼續(xù)處理2xx:成功--表示請求已被成功接收、理解、接受3xx:重定向--要完成請求必須進行更進一步的操作4xx:客戶端錯誤--請求有語法錯誤或請求無法實現(xiàn)5xx:服務器端錯誤--服務器未能實現(xiàn)合法的請求HTTP通信—Http常見狀態(tài)碼描述常見狀態(tài)代碼、狀態(tài)描述、說明:200

OK//客戶端請求成功400

Bad

Request//客戶端請求有語法錯誤,不能被服務器所理解401Unauthorized//請求,這個狀態(tài)代碼必須和WWW-Authenticate報//頭域一起使用403Forbidden//服務器收到請求,但是拒絕提供服務404

Not

Found//請求資源不存在,eg:輸入了錯誤的URL500

Internal

Server

Error//服務器發(fā)生不可預期的錯誤503ServerUnavailable//服務器當前不能處理客戶端的請求,一段時間后,//可能恢復正常eg:HTTP/1.1

200

OK

(CRLF)HTTP通信—Http響應應用舉例:GET響應

HTTP/1.1

200

OK

Server:Apache

Tomcat/5.0.12

Date:Mon,6Oct2003

13:23:42

GMT

Content-Length:112

<html><head>

<title>HTTP響應示例<title>

</head>

<body>

Hello

HTTP!

</body>

</html>HTTP的POST和GET兩種命令模式POST是被設計用來向上放東西的,而GET是被設計用來從服務器取東西的,GET也能夠向服務器傳送較少的數(shù)據(jù)。GET的數(shù)據(jù)是在HTTP

的頭部傳送的,而Post的數(shù)據(jù)則是在HTTP請求的內容里傳送。POST傳輸數(shù)據(jù)時,不需要在URL中顯示出來,而GET方法要在URL中顯示。GET方法由于受到URL長度的限制,只能傳遞大約1024字節(jié);

POST傳輸?shù)臄?shù)據(jù)量大,可以達到2M。HTTP

GET示例<html><body><form

action="login.jsp"

method="get"

>用戶名:<input

type="text"name="username"><br>密碼:<input

type="password"name="psd"maxlength=6><br><input

type="submit"

value="提交"><input

type="reset"

value="重填"></form></body></html>跳轉到數(shù)據(jù)處理頁面(html/jsp/aspx/php…)get方法提交數(shù)據(jù)會在URL中顯示注意要用name屬性才能在地址欄中顯示頁面和參數(shù)之間用?連接參數(shù)之間用&連接【返回】11.2

HTTP編程越來越多的

Java應用程序需要直接通過

HTTP

協(xié)議來訪問網(wǎng)絡資源。在

JDK

的 包中已經(jīng)提供了訪問

HTTP

協(xié)議的基本功能:HttpURLConnection。但是對于大部分應用程序來說,JDK

庫本身提供的功能還不夠豐富和靈活。除此之外,在Android系統(tǒng)中,Android

SDK集成了Apache的HttpClient模塊,用來提供高效的、功能豐富的支持HTTP協(xié)議工具包,并且它支持HTTP

協(xié)議最新的版本和建議。使用

HttpClient可以快速開發(fā)出功能強大的HTTP

程序。HTTP編程2種方法HttpURLConnection編程HttpClient編程【返回】1.

HttpURLConnection編程(以Post為例)提交登錄數(shù)據(jù)給Web服務器網(wǎng)站將結果反饋給Android客戶端HttpURLConnection主要步驟(以Post為例)創(chuàng)建URL對象:String

httpUrl="http格式的url地址串";//此處不帶參數(shù)URL

url

=

new

URL(httpUrl);通過HttpURLConnection創(chuàng)建連接對象:HttpURLConnection

conn

=(HttpURLConnection)

url.openConnection();需要強制轉換一下HttpURLConnection主要步驟(以Post為例)3)設置連接的幾個重要屬性:conn.setConnectTimeout(5000);

//設置連接超時時間,如5秒conn.setRequestMethod("POST");

//使用POST的方式conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);//允許輸出輸入//允許輸入//post方式最好不使用緩存conn.setRequestProperty("Charset","UTF-8");

//設置編碼字符集UTF-8

編碼用在網(wǎng)頁上可以在同一頁面顯示中文簡體繁體及其它語言(如日文,韓文)HttpURLConnection主要步驟(以Post為例)4)準備傳送的數(shù)據(jù),例如:String

datastr="username="+URLEncoder.encode("wust",

"utf-8")+"&psd="+URLEncoder.encode("123",

"utf-8");byte

[]

data=datastr.getBytes();將字符串編碼為utf-8格式將字符串轉化為適合物理層傳輸?shù)淖止?jié)流到時候這些值來自于文本框的輸入HttpURLConnection主要步驟(以Post為例)5)傳送數(shù)據(jù)給服務器:以流的方式DataOutputStream

outputStream

=new

DataOutputStream(conn.getOutputStream());outputStream.write(data);outputStream.flush();outputStream.close();//刷新//關閉這里的操作都是Java標準的的I/OHttpURLConnection主要步驟(以Post為例)6)接收服務器響應數(shù)據(jù):以流的方式BufferedReader

reader

=

new

BufferedReader(newInputStreamReader(conn.getInputStream()));String

resultData="";

//存放從服務器返回的信息String

line=null;while((line=reader.readLine())!=null){ //使用循環(huán)體來獲得數(shù)據(jù)

resultData+=line+"\n";}reader.close();

//關閉這里的操作都是Java標準的的I/OAndroid客戶端可以用一個

TextView顯示一下resultData第6步之前可加一個判斷請求是否成功處理:int

reponseCode

=conn.getResponseCode();if(response==HttpURLConnection.HTTP_OK){第6步代碼}(1)服務器端的準備MyEclipse中創(chuàng)建一個Web工程,命名為了“MyServer”。兩個JSP網(wǎng)頁:index.jsp和login.jspMyEclipse下載地址:index.jsp主要代碼<%@

page

language="java"

import="java.util.*"

pageEncoding="utf-8"%><body><form

action="login.jsp" method="post"

>用戶名:<input

type="text"name="username"><br>密碼:<input

type="password"name="psd"

maxlength=6><br><input

type="submit"

value="提交"><input

type="reset"

value="重填"></form></body>提醒:(1)將jsp文件保存為utf-8格式(2)將頁面pageEncoding改為="utf-8"改成get,看看瀏覽器地址欄區(qū)別附:如何將文件保存為utf-8jsp文件右鍵->Propertylogin.jsp主要代碼<%@

page

language="java"

import="java.util.*"

pageEncoding="utf-8"%><body><%String

username=request.getParameter("username");String

psd=request.getParameter("psd");if(username.equals("wust")&&psd.equals("123")){out.print("登錄成功!歡迎"+username);}else{out.print("登錄失??!");}%></body>運行網(wǎng)站index.jsp網(wǎng)站地址:其中指本地機,一般用來測試使用,也可用localhost代替8080:Web服務器端口號login.jsp(2)

Android客戶端準備工作:此將指定給自己很重要AndroidManifest.xml中添加訪問權限:<uses-permissionandroid:name="android.permission.INTERNET"/>Android4.0不推薦在主線程中使用HttpURLConnection(不安全),因此如要強制使用,則需在onCreate中添加代碼:StrictMode.ThreadPolicy

policy

=

newStrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);由于Android模擬器已

這兩句需要

android:minSdkVersion="9"

配合

了,因

要訪問本機的服務器,用它設定的另一個地址:主界面<LinearLayout

xmlns:android=""android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"

><EditTextandroid:id="@+id/editText1"android:hint="請輸入用戶名"android:layout_width="match_parent"android:layout_height="wrap_content"

><requestFocus

/></EditText><EditTextandroid:id="@+id/editText2"android:hint="請輸入密碼"android:layout_width="match_parent"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/button1"android:layout_width="110dp"android:layout_height="wrap_content"android:layout_gravity="right"android:text="登錄"/><TextViewandroid:id="@+id/textView1"android:textSize="10px"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="結果"/></LinearLayout>注:用戶名和密碼的textview定義略MainActivity主要代碼protected

void

onCreate(Bundle

savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//在主線程中強制使用子線程

StrictMode.ThreadPolicy

policy=newStrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);Buttonbt=(Button)findViewById(R.id.button1);bt.setOnClickListener(new

View.OnClickListener()

{@Overridepublic

void

onClick(View

v)

{String

httpUrl="

";URL

url=null;try

{url

=

newURL(httpUrl);}catch

(MalformedURLException

e1){

Toast.makeText(getApplicationContext(),"無法創(chuàng)建URL",Toast.LENGTH_SHORT).show();}創(chuàng)建URL對象(需要try/catch)注意服務器地址為:8080MainActivity主要代碼(續(xù))if(url!=null){HttpURLConnection

conn;try

{conn=(HttpURLConnection)url.openConnection();conn.setConnectTimeout(3000);conn.setRequestMethod("POST");//設置連接超時時間//Post方式conn.setDoOutput(true);//設置能輸出

conn.setDoInput(true);//設置能輸入

conn.setUseCaches(false);//不使用緩存conn.setRequestProperty("Charset","UTF-8");

//設置uft-8字符集創(chuàng)建連接對象

并設置相關屬性I/O操作也要try/catchMainActivity主要代碼(續(xù))//準備要傳送給服務器的數(shù)據(jù)String

username

=

((EditText)findViewById(R.id.editText1)

).getText().toString();String

password

=

((EditText)findViewById(R.id.editText2)

).getText().toString();String

datastr="username="+URLEncoder.encode(username,

"utf-8")+"&psd="+URLEncoder.encode(password

,

"utf-8");byte

[]

data=datastr.getBytes();準備要傳送的數(shù)據(jù)MainActivity主要代碼(續(xù))//向服務器發(fā)送數(shù)據(jù)DataOutputStream

outputStream=newDataOutputStream(conn.getOutputStream());outputStream.write(data);outputStream.flush();

//刷新outputStream.close();

//關閉//接收服務器返回的信息BufferedReader

reader

=

new

BufferedReader(newInputStreamReader(conn.getInputStream()));String

resultData

=

"";String

line=null;//使用循環(huán)體來獲得數(shù)據(jù)while((line

=

reader.readLine())!=null){resultData

+=

line

+

"\n";}reader.close();//關閉發(fā)送數(shù)據(jù)給服務器接收服務器返回的信息服務器返回的信息存放在resultData變量中MainActivity主要代碼//用一個TextView來顯示數(shù)據(jù)TextView

tv=

(TextView)findViewById(R.id.textView1);f(!resultData.equals("")){tv.setText(resultData);}else{tv.setText("讀取的內容為null");}}catch

(IOException

e)

{e.printStackTrace();Toast.makeText(getApplicationContext(),"出錯了!",Toast.LENGTH_SHORT).show();}}

//endif(url!=null)} //endtry});

//endonclick}

//endoncreate顯示服務器返回的信息運行情況先確認網(wǎng)站已啟動(Web服務器)然后再運行Android客戶端2.

HttpClient編程提交登錄數(shù)據(jù)給Web服務器網(wǎng)站將結果反饋給Android客戶端服務器端不變HttpClient主要步驟(以Post為例)1)創(chuàng)建HttpClient實例:HttpClient

httpClient

=

new

DefaultHttpClient();2)創(chuàng)建HttpPost請求對象:String

httpUrl="http格式的url地址串";//此處不帶參數(shù)HttpPost

httpPost

=

new

HttpPost(httpUrl);HttpClient主要步驟(以Post為例)3)設置需要傳遞的參數(shù)://(1)創(chuàng)建參數(shù)ArrayList<NameValuePair>

params

=

new

ArrayList<NameValuePair>();params.add(new

BasicNameValuePair("username",

"wustzz"));params.add(new

BasicNameValuePair("psd",

"123456"));//(2)對參數(shù)進行utf-8編碼UrlEncodedFormEntity

entity

=

new

UrlEncodedFormEntity(params,

"utf-8");//(3)將編碼的參數(shù)設置給HttpPost對象

httpPost.setEntity(entity);參數(shù)名參數(shù)值HttpClient主要步驟(以Post為例)發(fā)出POST請求并獲取服務器反饋:HttpResponse

response

=

httpClient.execute(httpPost);獲取服務器返回的內容:String

result="";//判斷請求是否成功處理if

(response.getStatusLine().getStatusCode()

==

HttpStatus.SC_OK)

{//獲取返回的內容result

=

EntityUtils.toString(response.getEntity(),

"utf-8");}使用EntityUtils工具將Entity轉換為uft-8編碼的字符串HttpClient主要步驟(以Post為例)6)關閉HttpClient以確保釋放所有占用的系統(tǒng)資源:httpClient.getConnectionManager().shutdown();Android客戶端準備工作:AndroidManifest.xml中添加訪問權限:<uses-permissionandroid:name="android.permission.INTERNET"/>Android4.0不推薦在主線程中使用HttpURLConnection(不安全),因此如要強制使用,則需在onCreate中添加代碼:StrictMode.ThreadPolicy

policy

=

newStrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);由于Android模擬器已將指定給自己了,因此要訪問本機的服務器,用它設定的另一個地址:很重要這兩句需要android:minSdkVersion="9"

配合服務器端沒有變化,因此只需設計Android客戶端代碼MainActivity主要代碼protected

void

onCreate(Bundle

savedInstanceState)

{super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);StrictMode.ThreadPolicy

policy

=

newStrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);Button

bt=(Button)findViewById(R.id.button1);bt.setOnClickListener(new

View.OnClickListener()

{@Overridepublic

void

onClick(View

v)

{MainActivity主要代碼(續(xù))HttpClient

httpClient=new

DefaultHttpClient();String

httpUrl=""; //此處不帶參數(shù)HttpPost

httpPost

=

new

HttpPost(httpUrl);//(1)創(chuàng)建參數(shù)String

username

=

((EditText)findViewById(R.id.editText1)

).getText().toString();String

password

=

((EditText)findViewById(R.id.editText2)

).getText().toString();ArrayList<NameValuePair>params

=

new

ArrayList<NameValuePair>();params.add(new

BasicNameValuePair("username",

username));params.add(new

BasicNameValuePair("psd",

password));try{//(2)對參數(shù)進行URL編碼UrlEncodedFormEntity

entity

=

new

UrlEncodedFormEntity(params,

"utf-8");//(3)將編碼的參數(shù)設置給HttpPost對象

httpPost.setEntity(entity);MainActivity主要代碼(續(xù))HttpResponse

response

=

httpClient.execute(httpPost);String

result="";if

(response.getStatusLine().getStatusCode()

==

HttpStatus.SC_OK)

{result=EntityUtils.toString(response.getEntity(),"utf-8");//獲取返回的內容}else{ result

="讀取的內容為null";

}TextViewtv=(TextView)findViewById(R.id.textView1);tv.setText(result

);}catch(Exception

e){e.printStackTrace();Toast.makeText(getBaseContext(),"出錯了!",Toast.LENGTH_SHORT).show();}httpClient.getConnectionManager().shutdown();//關閉HttpClient}});}運行情況同前例11.3

調用Web服務什么是Web服務(WebService)?Web服務是一個平臺獨立的,松耦合的,基于可編程的web的應用程序,可使用開放的XML標準來描述、發(fā)布、發(fā)現(xiàn)、協(xié)調和配置這些應用程序,用于開發(fā)分布式的互操作的應用程序。理解Web服務簡單的理解:Web服務是遠程的某個服務器對外公開的某種功能或方法, 通過調用該服務以獲得我們需要的信息。例如:某個網(wǎng)站對外公開了手機號碼歸屬地查詢服務,我們 只需要在調用該服務時傳入一個手機號,就能立即獲取該號 段的歸屬地信息。理解Web服務(續(xù))更通俗的理解:通過使用Web服務,我們能夠像調用本地方法一樣去調用遠 程服務器上的方法。我們不需要關心遠程的方法是Java寫的,還是PHP或C#寫 的;我們也不需要關心遠程的方法是基于Unix平臺,還是

Windows平臺,這就是Web服務平臺和語言無關性。Web服務示例

一些web服務列表Web服務示例(續(xù))國內手機號碼歸屬地查詢WEB

服務,提供最新的國內手機號碼段歸屬地數(shù)據(jù),每月更新。調用手機號碼歸屬地查詢Web服務編程調用Web服務示例手機號碼歸屬地查詢(HttpClient編程)

【完】補充SocketSocket套接字用于描述IP地址和端口,是通信鏈的句柄應用程序通過Socket發(fā)出網(wǎng)絡請求或應答網(wǎng)絡請求應用程序與TCP/IP協(xié)議進行交互的接口Socket的優(yōu)點服務器端與客戶端可以互相主動發(fā)送數(shù)據(jù)保持客戶端與服務器端數(shù)據(jù)的實時與同步與http相比http在請求結束時主動釋放連接56Socket(1)Socket通信必須包含的5種信息連接使用的協(xié)議(TCP/UDP)本地主機的IP地址本地進程的協(xié)議端口遠程主機的IP地址遠程進程的協(xié)議端口Socket的傳輸模式面向連接的傳輸無連接的傳輸57Socket(2)面向連接的Socket操作使用TCP協(xié)議連接必須在發(fā)送數(shù)據(jù)之前建立好并保持穩(wěn)定數(shù)據(jù)到達順序是固定的連接建立后可以使用流接口進行打開、讀、寫、關閉操作所有發(fā)送的信息都會在另一端以同樣的順序被接受無連接的Socket操作使用UDP協(xié)議不保證發(fā)出數(shù)據(jù)的達到不保證發(fā)出數(shù)據(jù)按照發(fā)出順序達到目的地面向連接的操作比無連接操的效率低,數(shù)據(jù)的安全 性高58Socket(4)Socket構造Java在包中提供了兩個類Socket和ServerSocket分別用來表示雙向連接的客戶端和服務端每一個端口提供一種特定的服務需要給出正確的端口,才能獲得相應的服務0-1023的端口為系統(tǒng)保留在選擇端口時最好選擇大于1023端口,以防止放生 沖突建立SOCKET連接至少需要一對套接字其中一個運行于客戶端,稱為ClientSocket另一個運行于服務器端,稱為ServerSocket59Android

套接字編程實例—SocketDemo創(chuàng)建Socket的方法:操作Socket的方法

InputStream

getInputStream()

OutputStream

getOutputStream()

void

close()

Socket(InetAddress

remoteAddress,int

remotePort)Socket(5)Socket和ServerSocket類Socket(InetAddress

address,

int

port);Socket(InetAddress

address,

int

port,

boolean

stream);Socket(String

host,

int

port);Socket(String

host,

int

port

,

boolean

stream);Socket(SocketImpl

impl);Socket(String

host,

int

port,

InetAddress

localAddr,

int localPort);Socket(InetAddress

address,

int

port

,

InetAddress

localAddr, int

localPort);ServerSocket(int

port);ServerSocket(int

port,

int

backlog);ServerSocket(int

port

,

int

backlog,

InetAddress

bindAddr);62Socket(6)參數(shù)含義address:雙相連接中另一方的IP地址host:雙相連接中另一方的主機名port

:雙相連接中另一方的端口號stream

:指明Socket是流Socket還是數(shù)據(jù)報SocketlocalPort

:表示本地主機的端口號localAddr

:本地機器的地址(ServerSocket的主機地址)bindAddr

:本地機器的地址(ServerSocket的主機地址)Impl

:Socket的父類可以用來創(chuàng)建ServerSocket或者可以用來創(chuàng)建Socket63Socket(7)常用的構造函數(shù)Socket(InetAddress

addr,

int

port)Socket(String

host,

int

port)創(chuàng)建基于Socket的連接服務器端的流套接字創(chuàng)建時的異常創(chuàng)建Socket如果發(fā)生錯誤產(chǎn)生異常IOException程序中必須進行處理創(chuàng)建時必須捕獲或拋出異常創(chuàng)建Socket和ServerSocket都

溫馨提示

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

評論

0/150

提交評論