乙個簡易的SocketIM

2021-09-23 19:40:00 字數 1927 閱讀 1215

今天做了乙個簡易的socketim的小示例。基本思想是開啟兩個winform,每個winform既充當伺服器也充當客戶端。乙個監聽8000埠,另外乙個監聽8001埠,兩個winform接收到資訊之後將資訊顯示在form的控制項上。

這篇記錄一下碼code中學到的一些東西。

.net的socket庫已經將c中對socket的所有使用封裝起來了。慶幸的是基本的函式和流程還是一樣的。

想要建立socket server,步驟如下:

socket socket = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);

socket.bind(endpoint);

socket.listen(5);

socket clientsocket = socket.accept();

clientsocket.receive(bytemessage);

socket.close();

建立client端,步驟如下:

socket socket = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);

socket.connect(endpoint);

socket.send(bytemessage);

socket.close();

c#中的多執行緒操作函式是封裝在system.threading中。我這裡是使用最簡單的多執行緒處理函式:

private void beginlisten()

thread thread = new thread(new threadstart(beginlisten));

thread.isbackground = true;

thread.start();

.net中winform控制項只能由建立控制項的執行緒來操作,子執行緒如果要操作就需要通過**的方式來迂迴。

msdn中是這樣描述的:

如果當前執行緒對該控制項沒有控制許可權,則這個執行緒呼叫控制項的invokerequired返回true,說明這個執行緒只有呼叫invoke方法才能修改控制項的屬性

如果當前執行緒對該控制項有控制許可權,則這個屬性返回false

這個方法有兩個引數,第乙個是方法,第二個引數是方法的引數

這個msdn上有個非常詳細的使用例子:

使用這兩個就可以使用這麼個方法:

1

2

3

4

5

6

7

8

9

10

11

12

13

delegatevoidsetlistbox(stringstrvalue);//定義委託

privatevoidsetlistboxvalue(stringvalue)

else

}

處理完這三個知識點,基本就完成了。

乙個簡易的shell

shell本質上就是將程序程式替換 替換原理 用fork建立子程序後執行的是和父程序相同的程式 但有可能執行不同的 分支 子程序往往要呼叫一種exec函式以執行另乙個程式。當程序呼叫一種exec函式時,該程序的使用者空間 和資料完全被新程式替換,從新程式的啟動例程開始執行。呼叫exec並不建立新程序...

乙個簡易的MVP框架

兩個介面 mvpview mvppresenter 乙個類 mvpactivity mvpfragment 1 mvpview public inte ce mvpview2 mvppresenter 泛型 public inte ce mvppresenterextends mvpview 3 m...

手寫乙個簡易的Ajax

乙個簡單的ajax get 請求 手寫乙個簡易的 ajax get請求版 ajax是一種技術方案,而不是一種新技術,依賴的依舊是前端三件套,最核心的依賴就是瀏覽器提供的xmlhttprequest物件,可以讓瀏覽器發出http請求和接收http響應。也就是說 我們使用xmlhttprequest物件...