無標(biāo)題文章

文檔目的

博主在搭建好的地面與空間通信的模擬通信網(wǎng)絡(luò)中,A<--->GW1<--->GW2<--->B之間能夠順利ping通,現(xiàn)在要測試是否能建立TCP連接,開始想直接在B上安裝apache服務(wù)器,然后A上的瀏覽器輸入B的ip地址可以訪問B并下載文件,效果如下:



但這樣在應(yīng)用層上是HTTP傳輸,而且由于對apache內(nèi)部機(jī)制不了解,無法分析傳輸時的網(wǎng)絡(luò)層和傳輸層情況。因此,博主還是傾向于自己用C語言寫一個socket通信程序,測試A到B之間的TCP連接和UDP連接,程序設(shè)計和實現(xiàn)步驟如下。

環(huán)境參數(shù)

服務(wù)器主機(jī):linux內(nèi)核版本3.11.0,ubuntu 13.10 amd64
客戶端主機(jī):ubuntu 10.04 i386
網(wǎng)關(guān):linux內(nèi)核版本2.6.27,ubuntu 8.10(這個是轉(zhuǎn)換網(wǎng)關(guān),應(yīng)用層網(wǎng)關(guān)軟件要求內(nèi)核版本是2.6.27,但不運(yùn)行網(wǎng)關(guān)軟件的話對于socket通信沒有影響)

預(yù)備知識

C語言基本語法,socket網(wǎng)絡(luò)編程基礎(chǔ)知識(可以參考點(diǎn)擊打開鏈接 前三章的內(nèi)容,講得非常詳細(xì)),TCP/IP模型

程序設(shè)計

在服務(wù)器端寫一個server.c,包含server一方的socket函數(shù);客戶端寫一個client.c,包含client一方的socket函數(shù)。兩邊運(yùn)行實現(xiàn)互通。
但也可以只寫一個server.c并在服務(wù)器端編譯運(yùn)行,然后在客戶端直接利用telnet命令(包括服務(wù)器端的ip和端口號)訪問服務(wù)器端即可完成socket通信。telnet是應(yīng)用層協(xié)議的一種,相對http簡單很多,telnet傳輸應(yīng)用在socket通信里其實充當(dāng)了client一方的socket程序的作用,這樣幾乎減小了一般的工作量。

實現(xiàn)過程

首先,server端編寫server.c代碼,下面貼上博主自己寫的server.c代碼:
然后,在終端利用gcc編譯,命令為#gcc -c server.c -o server
編譯通過后生成server可執(zhí)行程序,如果運(yùn)行提示沒有權(quán)限就用chmod命令添加執(zhí)行權(quán)限,運(yùn)行server命令為:
./server my_ip dest_ip
比如本地ip設(shè)為10.210.0.2,目的ip是192.168.1.2,則輸入命令:
./server 10.210.0.2 192.168.1.2
運(yùn)行完后終端處于阻塞狀態(tài),即處于accept()。此時在客戶端的終端上鍵入telnet命令,以我設(shè)置的服務(wù)器ip和程序中設(shè)置的端口號為例,命令為:
telnet 10.210.0.2 8000
現(xiàn)在服務(wù)器就可以推送消息給客戶端了,在服務(wù)器運(yùn)行一段鍵入字符串并回車,客戶端的終端上就能收到這些字符信息。在程序中的頭幾行里大家有沒有注意到這句
<pre name="code" class="cpp">
sockfd=socket(AF_INET,SOCK_STREAM,0); </pre>

SOCK_STREAM代表程序運(yùn)行后socket以流式套接字的方式通信,也就是TCP連接。如果你想測試UDP連接,那可以把SOCK_STREAM替換為SOCK_DGRAM,這樣socket就會以數(shù)據(jù)報格式通信。
如果你TCP和UDP連接都成功了做到了,恭喜你,你剛剛邁出了成為網(wǎng)絡(luò)程序員的第一步!

總結(jié)

其實只要有一定的網(wǎng)絡(luò)理論和C語言知識,socket編程并不難,關(guān)鍵要搞懂通信過程,函數(shù)的調(diào)用是有順序的,不能隨便編寫。當(dāng)然博主的程序存在交互不強(qiáng),關(guān)閉進(jìn)程偶爾出錯,耦合性太強(qiáng),運(yùn)行不方便等缺點(diǎn),但大方向把握對了后期完善就很簡單了。最后,祝各位看官也能輕松學(xué)到socket編程知識!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Socket編程 文檔來源 http://www.mamicode.com/info-detail-877996....
    aa瘋子aa閱讀 188評論 0 0
  • 她,經(jīng)過近半年的孕育,已初具雛形。 今天,在這個舉國歡慶的日子里,揭開她神秘的面紗,來闡述她的點(diǎn)滴。 首先我們來...
    Ma988閱讀 1,131評論 1 1
  • 感恩愛人陪我去修手機(jī),本來還想請我看電影。但是我怕帶著美看不好就沒看。 感恩北辰老鄰居在百腦匯上班,幫我找的修手機(jī)...
    寸心潔白閱讀 220評論 0 1
  • 無限風(fēng)光浩宇明, 群山奔涌似騰龍。 瀑布飛天濤聲涌, 薄霧迷紗漫嶺峰。 冉冉旭日絢麗...
    許永杰閱讀 455評論 0 0
  • 講個故事吧 一年前也是這樣的一天,操場人聲涌動,在日頭曝曬下所有人躁動不安。看門大爺死守著時間不放,等待中午十二點(diǎn)...
    聶久歡閱讀 299評論 0 0

友情鏈接更多精彩內(nèi)容