所謂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...