簡單的socket例項及原理(含原始碼)

2021-10-16 09:18:52 字數 2217 閱讀 7763

所謂socket通常也稱作"套接字",用於描述ip位址bai和埠,是乙個通訊鏈的控制代碼。應用程式通常通過"套接字"向網路發出請求或者應答網路請求。

socket分為服務端及客戶端,這裡我們用serversocket及clientsocket分別表示

伺服器監聽:伺服器端socket並不主動指定的客戶端socket,而是處於等待監聽狀態,實時監控網路狀態。

客戶端請求:客戶端clientsocket傳送連線請求,目標是伺服器的serversocket。所以clientsocket必須知道serversocket的ip及埠號

連線確認:當伺服器socket監聽到或者是受到客戶端socket的連線請求時,伺服器就響應客戶端的請求,建議乙個新的socket,把伺服器socket傳送給客戶端,一旦客戶端確認連線,則連線建立。

//服務端

thread threadwatch = null;

socket mysocket = null;

listbox clientlistboxs = null;

//接受快取

byte arrmsgrec = new byte[1024 * 1024 * 2];

socket policy = null;

dictionarysoketlist = new dictionary();

thread threadrece = null;

private void startsocket()

// 監聽新客戶端請求

private void watchconnection()

));soketlist.add(policynew.remoteendpoint.tostring(), policy);//為新建連線建立新的socket

if (threadrece == null)}}

這個執行緒是一直存在的,主要的任務就是監聽是否有client與server端進行連線,如果連線成功則會另開乙個執行緒」rece」。在該執行緒中則主要是得到字元資料的處理,包括接受資料以及傳送資料。

private void rece()

catch (exception)}}

private void showmessage(string msg)

else

}

下面是向客戶端傳送資料

private void send(object sender, routedeventargs e)

這裡需要注意:其實在tcp/ip傳輸的資料都應該是以位元組為單位的。比如說傳送50個double型別的資料就是傳送400個位元組的陣列

//客戶端

socket mysocket = null;

byte arrmsgrec = new byte[1024 * 1024 * 2];

public void client()

從服務端原始碼可以看到訊息的組成由頭部(兩位元組)+內容+尾部(兩位元組)組成,所以這裡取內容的話跳過頭部取總長度-4的部分就好了

public void receivemsg()

}

//傳送

public void sends()

將資料顯示在控制項上

private void showmessage(string msg)

else

}

這裡,簡單的乙個socket通訊就完成了,效果如下:

socket的實際用處有很多,這裡我主要用於程式和裝置進行通訊,像qq就是用socket通訊的,瀏覽器和伺服器也是用socket進行通訊的,只是傳輸的是以http協議的http報文, 有興趣的朋友可以自己研究下

這裡推薦一篇比價詳細的博文

有興趣的可以關注「墨水直達」,裡面有許多免費的程式設計資料可以領取哦~

Socket原理的簡單理解

最近我在做乙個android小專案用到了socket,今天整理了一下資料總結我對socket的理解。socket的使用就在我們生活中,只是不被我們關注而已,首先看看生活中哪些用到了socket 網路中程序之間如何通訊 當我們開啟瀏覽器瀏覽網頁時,瀏覽器的程序和web伺服器通訊的 當我們用qq聊天時,...

MOV實現原理及簡單管理例項

思想 建立骨骼,執行動畫,獲取骨骼的資料,在update中設定實時設定攝像機的look,eye點即可實現此效果,為了實現管理可以建立乙個單例類管理,例如 g.c camerasan setmetatable c camerasan,function c camerasan new local cam...

socket的簡單通訊例項

分為服務端和客服端,先看服務端吧 做乙個控制台程式,using system using system.collections.generic using system.text using system.net using system.net.sockets namespace socket r...