網路程式設計 socket程式設計通訊

2021-08-31 23:56:36 字數 2387 閱讀 4569

一直感覺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...