Socket的入門案例 中

2021-08-14 13:27:38 字數 1968 閱讀 4828

客戶端傳遞的資訊可以從沒有含義的字串變成乙個有意義的字串,比如:類名「com.aishang.socket.computer」以及乙個方法的簽名「add(3,5)」,當客戶端把類名和方法的簽名通過socket流傳遞到服務端後,伺服器端先處理一下從這個字串中切分出來類名:「com.aishang.socket.computer」、方法名「add」和引數列表:「3,5」。而在伺服器端其實是有這個業務類和方法的宣告的:

package com.aishang.socket;

public

class computer

}

伺服器端從socket流中獲得類名 「com.aishang.socket.computer」後,利用反射技術構造乙個類的例項:
class clazz = class.forname(classname);

object obj = clazz.newinstance();

然後再從這個類的位元組碼檔案物件中獲得到方法物件
method

method = clazz.getmethod

(methodname, int.class,int.class);

最後通過反射的方式呼叫上面的method物件
object retvalue = method.invoke

(obj, integer.parseint(parameterlist[0]), integer.parseint

(parameterlist[1]));

最後將呼叫的結果發回到客戶端。總結一下:客戶端其實只是向伺服器端傳送了一堆字串,這堆字串不是普通的字串,是包含了呼叫伺服器端的類名、方法名、實參列表資訊的有價值的文字,當伺服器端利用socket流接收到這些資訊後,反射呼叫伺服器上的方法。為何要用反射?其實傳遞過來的都是字元,這個時候只有反射能解決這個問題。其實這就是遠端訊息呼叫的雛形。
以下是完整的**:

伺服器端**:serverservice.class

public

class serverservice

} }

執行緒任務:servertask.class

public

class

servertask

implements

runnable

@override

public

void

run() catch (exception e)

//2.將呼叫結果寫到sokect的輸出流中,以傳送給客戶端

//將socket輸出流用printwriter重新包裝一下

printwriter pw = new printwriter(out);

pw.println(retvalue.tostring());

pw.flush();

} catch (ioexception e) finally catch (ioexception e)

} }

}

伺服器端定義的業務方法(供遠端呼叫):computer.class

package com.aishang.socket;

public

class computer

}

客戶端:clientservice.class

public

class clientservice catch (exception e) finally catch (ioexception e)

} }

}

socket 案例分析

所謂網路,就是很多電腦相互連線起來所組成的。我們要學網路程式設計,其實就是程式設計來實現兩個計算機之間通訊。比如,瀏覽器就使用到網路通訊,使得我們的計算機可以和 伺服器通訊,獲取到我們需要瀏覽的內容。又如,qq 讓我們可以和好朋友一起交流。以上這些都是使用到了網路程式設計。程式分為服務端和客戶端 服...

Socket通訊案例

socket通訊案例 服務端 region 服務端 int port 1234 string host 127.0.0.1 ipaddress ip ipaddress.parse host ipendpoint ipe new ipendpoint ip,port socket ssocket n...

linux中 c語言的 socket程式設計案例

監聽端 1.建立 socket 2.建立並初始化 監聽端sockaddr 3.繫結監聽端 sockaddr 4.設定監聽個數 5.建立傳送端sockaddr 6.接受傳送端 沒有傳送端連線,會阻塞 7.開始 接收傳送資料 8.關閉連線傳送端 1.建立 socket 2.建立並初始化 監聽端socka...