Linux網路程式設計

2021-04-13 05:41:05 字數 3231 閱讀 6449

linux網路程式設計

當然,我們現在,將要開始編寫的第乙個網路程式,雖然非常簡單,但是卻可以很

清楚的說明大部分編寫網路程式需要的基本概念,好了先讓我們看看網路程式的tcp服

務器端的編寫步驟:

1. 和伺服器的步驟一樣。

2. 通過設定套介面位址結構,我們說明,客戶端要與之通訊的伺服器的ip位址和

埠。

3. 呼叫connect函式來連線伺服器。

4. 傳送或者接收資料,一般使用send和recv函式呼叫來實現。

5. 終止連線。

以上的步驟,是比較普遍的,我們可以從中看出,編寫網路程式是很有意思的,同

時,也不是非常複雜,當然,這不包括,高難度的東西:-),下次,我會給出乙個簡

單的伺服器和乙個客戶機程式。

今天,我給出的**包括乙個伺服器,和乙個客戶機程式,但是省

略了很多**, 比如說錯誤處理**,這樣做主要是為了使網路程式設計的主線清楚,所

以,這兩個 程式談不上網路安全性,和穩定性,這些是以後的話題。但是,對於基本

理解 網路程式設計已經足夠了。我會在下次給出乙個完整可執行的程式。下面我會詳細 解

釋程式的步驟:

先要包括一部分網路程式設計必須的頭部檔案:

#include

#include

#include

#include

int main(int argc,char *argv)

這是客戶端的程式:

這兩個程式執行後,當客戶端連線到伺服器後,將接收到伺服器傳來的字串hello!

welcome here!,不過,程式除錯的任務還得又你自己要完成。

你想知道著名的oicq使用的是什麼技術來收發訊息的嗎?今天,我

給出的兩個程式,乙個伺服器 和乙個客戶端程式,便能告訴你,其中的基本技術,當

然,我指的不包括,它的介面是怎樣做的:)

這是傳送資料的程式:

/*頭部檔案包括網路需要的和基本輸入輸出需要的*/

#include #include

#include

#include

#include

int port = 5500;

void main()

sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&address, sizeof(add

ress)); // 發現了嗎使用的函式不一樣,它也是傳送資料

count++;

}while (flag);

} 這是接收資料的程式:

#include

#include

#include

#include

#include

char *hostname = "127.0.0.1"; //這個特殊的ip表示本的計算機

void main()

close(sockfd);

}當你編譯除錯通過了後,在乙個視窗,執行接收程式,乙個視窗執行傳送程式,你

就可以看到資料被創送了。網路程式是可以在本地機器上,使用兩個不同的視窗來執行

,模擬客戶端和伺服器的。

今天,我會解釋網路程式設計中非常重要的兩個概念:tcp程式設計和udp編

程,這是真真進入網路程式設計的燦爛世界必須深入理解的部分。

首先,我們必須明白,一般作業系統,包括windows,linux,unix,他們提供的**用

程式設計師使用的程式設計介面,一般的函式名字都差不多。不同的是,他們的作業系統對這些

函式(也可以說是系統呼叫)的實現細節不盡相同,因此,各種作業系統,在提供網路

服 務的時候,就存在著,諸如,速度,效率,穩定性的差別。

那麼,就網路程式設計的套介面字的選則來看,一樣存在著以上的差別。也就是說,你

選擇tcp套接字和選擇udp程式設計,在傳輸資料時, 一樣有著,速度,效率,穩定性的差別

。首先,明白這一點,對於開始網路程式設計是非常重要的。

tcp套接字,作業系統向你提供的是乙個穩定的資料通路,從程式設計師的角度來看,你

只需要明白,當你使用tcp程式設計時,如果你呼叫 的傳送資料函式,比如send()函式,它

的返回成功,那麼表示,系統傳送出的資料肯定被通訊的對方準確接收到了。而udp套接

字, 作業系統給你提供的是乙個不穩定的,無連線的資料通路,所以,當你使用udp編

程時,如果你呼叫的傳送資料的函式,如sendto() 函式,它的返回成功,那麼表示,你

要傳送的資料已經傳送到了網上,而這些資料是否到達了你要傳送資料的對方,那時不

一定的。所以,對於udp程式設計,我們如果要保證資料的傳送的準確,及時,我們需要自己

建立起,一些資料傳送的控制機制,來確保,我們的資料成功傳送到對方,而不僅僅是

把資料傳送到了網路上,我們就不過問了。當然,對於tcp程式設計,作業系統,已經,幫我

們做了一 系列控制功能,所以,我們不需要考慮太多的東西;-)

從以上的分析,你應該可以看出,對於初學者或者說,tcp程式設計是非常好的入門點,

也是很容易的。當然,udp有他自己的好處,不如 ,他雖然不能保證你呼叫一次傳送函

數就把資料傳送到對方那裡,但是只要你進行適當的處理,你會發現,udp傳送資料的速

度,比tcp程式設計要快!天下沒有十全十美的!

tcp程式設計擁有了可靠的資料連線,udp不具有,但是在速度方面,udp程式設計缺優於tcp

程式設計,特別是對於傳輸短訊息,所以,我認為oicq 所以選擇udp程式設計,這個原因是其中

很重要的乙個^-^。

現在,我已經說明了,tcp和udp程式設計的重要差別,雖然,這些差別是由協議本身引

入的,但是對於程式設計來說,理解了是很有好處的。

其實,網路軟體在很大程度上是對各種網路協議的實現,不管這種協議是官方的,還

是你自己定義的。所以,網路軟體的好壞也和協議的好壞有著直接的關係。當然,伺服器

/客戶機模式在某種程度上就規定了這樣一種機制:

我們當然可以通過,規定很多的東西來保證我們通訊的順利進行。比如一方傳送,一

方等待。 傳送方在沒有得到回答前重複多次傳送資料。傳送方還可以使用定時器等方法,

來保證不出現餓死和死鎖現象。如果你想學習更多的方法和思想,你可以學學tcp/ip協議

和各種應用協議,他們在不同的層次上解決了各種可能遇到的問題。

當然,在網路上會出現的障礙是多種多樣的,你所用的協議及你所寫的**,一起決

定了你的網路程式的效能和安全。所以,現實生活中的網路程式往往是很複雜的。

】【列印】

linux 網路程式設計

當然,我們現在,將要開始編寫的第乙個網路程式,雖然非常簡單,但是卻可以很 清楚的說明大部分編寫網路程式需要的基本概念,好了先讓我們看看網路程式的tcp服 務器端的編寫步驟 現在讓我們來看看網路程式客戶端的程式設計步驟 以上的步驟,是比較普遍的,我們可以從中看出,編寫網路程式是很有意思的,同 時,也不...

linux 網路程式設計

套接字程式設計 struct sockaddr unsigned short sa family 位址協議,ipv4 tcp ip af inet,ipv6 af inet6 char sa data 14 14位元組的位址協議 struct sockaddr in unsigned short s...

Linux網路程式設計

1 tcp ip協議族 tcp ip為協議族,有很多子協議,為一族。tcp 傳輸控制協議 ip 網路協議 2 我們所做的為伺服器應用軟體開發,伺服器 有相應的硬體,作業系統 電腦也為伺服器,不過多了個顯示 3 協議棧 存放很多協議的地方叫做協議棧,其範圍是從協議無關層 如通用的socket層介面與裝...