UDP套接字編程 返回系統(tǒng)時間

計算機網(wǎng)絡實驗

簡單UDP套接字編程

這是學校老師自己改進了一點的題目。我預習了好久才搞明白风秤,同學來問的時候碉咆,一大堆簡單問題實在是不想回答...所以,這時候我覺得博客是個好東西漫玄!
我的任務是做客戶端和服務器,并通過修改服務器压彭,實現(xiàn)在客戶端輸入GetTime睦优,然后經(jīng)過服務器返回當前系統(tǒng)時間**
==首先,Ubuntu系統(tǒng)==
這個是不可少的壮不,因為我們學的這個套接字就是在ubuntu上實現(xiàn)的汗盘,我是裝的ubuntu16.04,沒條件的裝虛擬機也可以询一。

這個流程最好還是熟悉一下

此次UDP套接字程序步驟

  1. 創(chuàng)建套接字
  2. 命名套接字
  3. 在服務器上隐孽,等待消息
  4. 在客戶端上,發(fā)送消息
  5. 將響應發(fā)送回客戶端
  6. 關閉套接字
    具體程序不給出健蕊,網(wǎng)上參考有很多菱阵,為了節(jié)省時間,老師給的代碼绊诲,雖然有自己修改的送粱,但是不敢發(fā)出來,畢竟老師還是很牛批的掂之,萬一找到我追究責任抗俄,那我不扯犢子了嘛脆丁。所以主要寫寫例如sendto,recvfrom之類的用法。

1.創(chuàng)建套接字

使用系統(tǒng)命令==socket==來創(chuàng)建套接字

int socket(int domain, int type, int protocol);

里面三個參數(shù)具體類型我還沒搞懂动雹,就不發(fā)了emmm

2.命名套接字

創(chuàng)建的套接字不能直接使用槽卫,要對其進行命名,使用系統(tǒng)的==bind==進行命名胰蝠,給該套接字關聯(lián)一個IP和端口號

int bind(int socket, const struct sockaddr *address, size_t address_len);

socket:服務器或者客戶端自己創(chuàng)建的socket
address:服務器或者客戶端自己的地址信息(協(xié)議族歼培、IP、端口號)
address_len:服務器或者客戶端自己的地址信息的長度

3. 在服務器上茸塞,等待消息

在服務器通過==recvfrom==接收來自客戶端的消息躲庄,請記住我們接下來要修改服務器代碼實現(xiàn)返回==時間==的就是在這一步后面修改代碼。
服務器在循環(huán)里面不斷調(diào)用==recvfrom==函數(shù)钾虐,接收客戶的數(shù)據(jù)噪窘,并輸出接收到的客戶數(shù)據(jù)的長度和具體內(nèi)容。

int recvfrom(int socket, void *buffer, size_t length, int flags, struct sockaddr *src_addr, socklen_t *src_len);

socket:標識一個已連接套接口的描述字效扫。
buffer:接收數(shù)據(jù)緩沖區(qū)倔监。
length:緩沖區(qū)長度。
flags:調(diào)用操作方式菌仁。
src_addr:(可選)指針浩习,指向裝有源地址的緩沖區(qū)。
src_len:(可選)指針济丘,指向from緩沖區(qū)長度值谱秽。
以上是普通的套接字編程,在此次實驗中還要求了修改服務器代碼來實現(xiàn)返回客戶端的是==系統(tǒng)時間==闪盔。所以這里我們主要注意一下==buffer==弯院;

4.在客戶端上辱士,發(fā)送消息

UDP是無連接的泪掀,所以客戶端可以直接向服務器發(fā)送消息,通過==sendto==向服務器發(fā)送

int sendto(int socket, const void *buffer, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len);

socket:一個標識套接口的描述字颂碘。
buffer:包含待發(fā)送數(shù)據(jù)的緩沖區(qū)异赫。
length:buf緩沖區(qū)中數(shù)據(jù)的長度。
flags:調(diào)用方式標志位头岔。
dest_addr:(可選)指針塔拳,指向目的套接口的地址。
dest_len:to所指地址的長度峡竣。

5.將響應發(fā)送回客戶端

依舊通過==sendto==將響應發(fā)回客戶端由客戶端==recvform==后輸出

6.關閉套接字

可以使用系統(tǒng)的==close==關閉套接字

close();

以上那些內(nèi)容網(wǎng)上都可以搜到靠抑,也許比我還詳細。所以我們這個主要要的在修改服務器代碼适掰,將給客戶端發(fā)送的數(shù)據(jù)更改為系統(tǒng)時間

題目是在客戶端輸入GetTime然后顯示系統(tǒng)時間颂碧。輸入其他字符串荠列,返回原字符串

還是之前讓注意的==recvfrom==里面的==buffer==,這是我們要判斷的载城,在服務器接收的內(nèi)容存在==buffer==中肌似,而==recvform==返回的值我們設為==n==,這是==buffer==的長度诉瓦,也就是你輸入的字符存在于==buffer==中.
我們可以建立一個time_p[]來存你要對比的字符串川队,也就是GetTime,但是要注意的是你在客戶端輸入的數(shù)據(jù)基本上是帶有回車的睬澡,這樣單純的對比是會出錯的固额,因為自己設置的對比用數(shù)組不含有回車.
所以我們要在預設的數(shù)組中添加回車。這個過程中要時刻注意自己的數(shù)組和讀取的客戶端發(fā)來的數(shù)組的結束標志和換行煞聪。
只需要在用==strcmp==判斷出接收的數(shù)據(jù)和自己預存的數(shù)據(jù)是否一樣对雪,是則將緩存區(qū)數(shù)據(jù)更改為系統(tǒng)時間(這一步要記住通過==strlen==判斷字符串長度并修改==n==,因為我們發(fā)送給客戶端時要用緩沖區(qū)長度米绕,如果不修改瑟捣,會導致發(fā)送的數(shù)據(jù)缺失),否則直接返回栅干。

補充時間函數(shù)

#include<stdio.h>
#include<time.h>
int main()
{
    time_t timep;
    time (&timep);
    printf("%s",ctime(&timep));
    return 0;
}

這是我自己修改服務器時更改的部分代碼迈套,有變動。而且碱鳞,值得注意的是因為是在死循環(huán)里不斷接收客戶端發(fā)來的數(shù)據(jù)桑李,我出現(xiàn)了數(shù)據(jù)有些重復了上次輸入的。所以最好還是在死循環(huán)內(nèi)用==memset==清空一下==buffer==窿给。我清空后就避開了這個錯誤贵白。

char time_p[] = "GetTime\n";
    time_t timep;
    time (&timep);




if(strcmp(buffer,time_p) == 0)
        {
            memset(buffer,0,sizeof(mesg));
            strcpy(buffer,ctime(&timep));
            k = strlen(buffer);
            buffer[k] = '\r';
            buffer[k+1] = '\0';
            n = k+1;
        }

說實話,這個預習還真是惡心崩泡。禁荒。。因為沒接觸過角撞,“弄清”這些函數(shù)花了好久呛伴。還一大堆東西沒弄明白。
倉促寫個這玩意谒所。難免有錯誤热康,發(fā)現(xiàn)請指出。劣领。姐军。

最后的最后,給個參考網(wǎng)址

參考鏈接

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奕锌,隨后出現(xiàn)的幾起案子衫贬,更是在濱河造成了極大的恐慌,老刑警劉巖歇攻,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件固惯,死亡現(xiàn)場離奇詭異,居然都是意外死亡缴守,警方通過查閱死者的電腦和手機葬毫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屡穗,“玉大人贴捡,你說我怎么就攤上這事〈迳埃” “怎么了烂斋?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長础废。 經(jīng)常有香客問我汛骂,道長,這世上最難降的妖魔是什么评腺? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任帘瞭,我火速辦了婚禮,結果婚禮上蒿讥,老公的妹妹穿的比我還像新娘蝶念。我一直安慰自己,他們只是感情好芋绸,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布媒殉。 她就那樣靜靜地躺著,像睡著了一般摔敛。 火紅的嫁衣襯著肌膚如雪廷蓉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天舷夺,我揣著相機與錄音苦酱,去河邊找鬼售貌。 笑死给猾,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的颂跨。 我是一名探鬼主播敢伸,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恒削!你這毒婦竟也來了池颈?” 一聲冷哼從身側響起尾序,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎躯砰,沒想到半個月后每币,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡琢歇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年兰怠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片李茫。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡揭保,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出魄宏,到底是詐尸還是另有隱情秸侣,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布宠互,位于F島的核電站味榛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏予跌。R本人自食惡果不足惜励负,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匕得。 院中可真熱鬧继榆,春花似錦、人聲如沸汁掠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽考阱。三九已至翠忠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乞榨,已是汗流浹背秽之。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吃既,地道東北人考榨。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像鹦倚,于是被迫代替她去往敵國和親河质。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容