iOS Socket UDP廣播

建立網(wǎng)絡(luò)通信連接至少要一對端口號(socket)碎浇。socket本質(zhì)是編程接口(API)讥裤,對TCP/IP的封裝宅静,TCP/IP也要提供可供程序員做網(wǎng)絡(luò)開發(fā)所用的接口,這就是Socket編程接口涌乳;HTTP是轎車蜻懦,提供了封裝或者顯示數(shù)據(jù)的具體形式;Socket是發(fā)動機(jī),提供了網(wǎng)絡(luò)通信的能力夕晓。

http://www.cnblogs.com/purpleraintear/p/6403053.html 這里有一篇關(guān)于UDP疑難雜癥

創(chuàng)建 socket

    // 創(chuàng)建 socket
    // AF_INET IPv4; AF_INET6 IPv6
    // SOCK_STREAM TCP; SOCK_DGRAM UDP
    _socketFileDescriptor = socket(AF_INET, SOCK_DGRAM, 0);

發(fā)送廣播

發(fā)送廣播的時候宛乃,需要將socket設(shè)置為廣播:

    // 設(shè)置socket的屬性為廣播
    int value = 1;
    int error = setsockopt(_socketFileDescriptor, SOL_SOCKET, SO_BROADCAST, (const void *)&value, sizeof(value));

發(fā)送廣播數(shù)據(jù):

dispatch_queue_t queue = dispatch_queue_create("net.qigge.socket", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        // 設(shè)置sendto 發(fā)送的地址
        struct sockaddr_in socketParameters;
        socketParameters.sin_family = AF_INET;
        socketParameters.sin_addr.s_addr = INADDR_BROADCAST;
        socketParameters.sin_port = htons([_port intValue]);
        sendto(_socketFileDescriptor, [data bytes], [data length], 0, (struct sockaddr *)&socketParameters22, sizeof(struct sockaddr));
        NSLog(@"sendto fail, errno=%d\n", errno); // errno 錯誤代碼
    });

注意:當(dāng)socket為阻塞模式時,sendto()和recvfrom()將會阻塞當(dāng)前線程蒸辆,應(yīng)當(dāng)將這個兩個方法放入子線程中烤惊。

接收廣播

接收廣播之前,需要先綁定端口:

struct sockaddr_in socketParameters;
socketParameters.sin_family = AF_INET;
socketParameters.sin_addr.s_addr = htonl(INADDR_ANY);
socketParameters.sin_port = htons([_port intValue]);
int b = bind(_socketFileDescriptor, (struct sockaddr *)&socketParameters, sizeof(socketParameters));
if ( b < 0) {
        NSLog(@"服務(wù)端綁定失敗");
        return;
    }
NSLog(@"服務(wù)端綁定成功吁朦!");

接收信息:

dispatch_queue_t queue = dispatch_queue_create("net.qigge.rec", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        while (1) {
            int                     err;
            struct sockaddr_storage addr;
            socklen_t               addrLen;
            uint8_t                 buffer[65536];
            ssize_t                 bytesRead;

            addrLen = sizeof(addr);
            
            bytesRead = recvfrom(_socketFileDescriptor, buffer, sizeof(buffer), 0, (struct sockaddr *) &addr, &addrLen);

            if (bytesRead < 0) {
                err = errno;
            } else if (bytesRead == 0) {
                err = EPIPE;
            } else {
                NSData *    dataObj;
                NSData *    addrObj;

                err = 0;

                dataObj = [NSData dataWithBytes:buffer length:(NSUInteger) bytesRead];
                addrObj = [NSData dataWithBytes:&addr  length:addrLen  ];
            }
        }
    });

服務(wù)端和客戶端都適用于發(fā)送UDP廣播和接收UDP廣播

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柒室,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子逗宜,更是在濱河造成了極大的恐慌雄右,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纺讲,死亡現(xiàn)場離奇詭異擂仍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)熬甚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門逢渔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乡括,你說我怎么就攤上這事肃廓。” “怎么了诲泌?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵盲赊,是天一觀的道長。 經(jīng)常有香客問我敷扫,道長哀蘑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任葵第,我火速辦了婚禮绘迁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卒密。我一直安慰自己缀台,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布栅受。 她就那樣靜靜地躺著将硝,像睡著了一般恭朗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上依疼,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天痰腮,我揣著相機(jī)與錄音,去河邊找鬼律罢。 笑死膀值,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的误辑。 我是一名探鬼主播沧踏,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巾钉!你這毒婦竟也來了翘狱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤砰苍,失蹤者是張志新(化名)和其女友劉穎潦匈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赚导,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡茬缩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吼旧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凰锡。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖圈暗,靈堂內(nèi)的尸體忽然破棺而出掂为,到底是詐尸還是另有隱情,我是刑警寧澤厂置,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布菩掏,位于F島的核電站魂角,受9級特大地震影響昵济,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜野揪,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一访忿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斯稳,春花似錦海铆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽殴边。三九已至,卻和暖如春珍语,著一層夾襖步出監(jiān)牢的瞬間锤岸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工板乙, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留是偷,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓募逞,卻偏偏與公主長得像蛋铆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子放接,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

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

  • 個人認(rèn)為刺啦,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,051評論 0 8
  • 1.這篇文章不是本人原創(chuàng)的纠脾,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的洪燥,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,051評論 6 174
  • 11.1 引言 UDP是一個簡單的面向數(shù)據(jù)報的運輸層協(xié)議:進(jìn)程的每個輸出操作都正好產(chǎn)生一個UDP數(shù)據(jù)報,并組裝成一...
    張芳濤閱讀 2,795評論 1 6
  • 1.1 TCP/IP協(xié)議組 TCP/IP協(xié)議(傳輸控制協(xié)議)由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成 IP層負(fù)責(zé)...
    F麥子閱讀 2,783評論 0 25
  • 深刻自省磷瘤,隨著跑步規(guī)律起來之后芒篷,我感覺自己的自律性有所增強。但是還是沒有達(dá)到自己的要求采缚≌肼克里希提那木的小組,我需要...
    暗夜閱讀 204評論 0 0