一直感覺socket這個東西挺神秘的 ,覺得是大牛級別的才能駕輕就熟。今天碰巧看了一下socket的相關資料,通過socket實現客戶端和服務端的通訊,從實戰中去體驗socket的用處。
先給大家上一張圖
這張圖大致就是tcp協議和udp協議的分布範圍,其中,socket負責的是傳輸層之間的通訊
socket是基於應用服務與tcp/ip通訊之間的乙個抽象,他將tcp/ip協議裡面複雜的通訊邏輯進行分裝,對使用者來說,只要通過一組簡單的api就可以實現網路的連線
簡而言之,socket已經封裝成相應的方法,我們呼叫相應的方法即可進行socket的使用。
服務端:
public static void main(string args) catch (ioexception e)
}
客戶端:
public static void main(string args) catch (ioexception e)
}
注意:1.socket連線需要先啟動服務端,再啟動客戶端,這樣客戶端才能通過埠號去找到開啟服務的socket服務端
2.在客戶端中,需要關閉資源,也就是shutdowmoutput()方法,這個方法的好處是,如果後期做到服務端響應客戶端的訊息時,客戶端是可以接收到的,如果呼叫的是close()方法,那就真的是關掉整個資源,再也收不到其他訊息了。
將服務端和客戶端的**編寫完成後,依次啟動服務端和客戶端,服務端會立即接收到客戶端發的資訊,如圖:
這代表socket中服務端和客戶端完成了一次通訊,我們在服務端呼叫相應的方法進行服務端的建立,客戶端也是,運用基本的socketapi完成了一次通訊,也是一次對socket的基本知識的熟悉。
1.客戶端可以傳送多條訊息嗎?
2.服務端能不能響應客戶端的資訊呢?
3.客戶端和服務端能不能正常發資訊進行交流?
答案當然是可以的,只不過需要我們去不斷的變通。
服務端:
public static void main(string args)
}catch (ioexception e)
}
客戶端:
public static void main(string args)
} catch (ioexception e)
}
這邊在客戶端和服務端都加了乙個迴圈,客戶端迴圈讀取輸入的值,服務端迴圈讀取輸出的值,最後如圖:
客戶端實現
服務端實現
通過乙個迴圈,就可以解決傳送多條通訊的問題
服務端和客戶端想要進行互相通訊,那就需要兩者具備接收和傳送資訊的功能,並且相應的建立檔案的位置是比較重要的,否則會出現服務端永遠響應一條資訊,錯誤實例如圖:
此圖是服務端**有誤,就像foreach迴圈一樣,初始化**的地方有誤,會導致後續的**取值全部相同,這裡就是在第二行全部取空值。
正確服務端**如下;
public static void main(string args)
} catch (ioexception e)
}
客戶端**:
public static void main(string args) */
}} catch (ioexception e)
}
通訊客戶端:
通訊服務端:
這樣就實現了服務端和客戶端之間的通訊。
現在是做一些這方面的積累,等待真正使用的時候不至於手忙腳亂。
讓我們一起好好學習天天向上吧!
socket通訊程式設計
1 socket通訊模型如下 應用程式通過套接字可以進行通訊,可以使用udp協議或者使用tcp協議,當客戶端和伺服器端的協議時相對應的,客戶端使用tcp,那麼伺服器端使用tcp 2 udp協議 把資料打包成資料報,然後直接傳送對應的ip位址,速度快,但是不保證 成功率,並且資料大小有限 tcp協議 ...
網路通訊 socket程式設計相關
衝擊年薪50w,助你高階python工程師 一 nonblock socket傳送資料返回 1,errno是etimedout 現象 通過poll返加該套節字可讀,但讀取時,返回 1,errno是etimedout。分析 1 該套節字主要用來傳送,該節點是千兆網絡卡,傳送的流量已近上限。2 該節點的...
Linux網路程式設計之Socket通訊
伺服器端 socket bind listen accept write read close 客戶端 socket connect write read close 1 socket函式的用法 int socket int domain,int type,int protocol 返回值為sock...