iOS-Socket(客戶端)C語言扫夜,以TCP為例楞泼,簡單的介紹幾個(gè)函數(shù)

1.Socket是個(gè)什么玩意

socket起源于Unix,而Unix/Linux基本哲學(xué)之一就是“一切皆文件”笤闯,都可以用“打開open –> 讀寫write/read –> 關(guān)閉close”模式來操作堕阔。我的理解就是Socket就是該模式的一個(gè)實(shí)現(xiàn),socket即是一種特殊的文件颗味,一些socket函數(shù)就是對其進(jìn)行的操作(讀/寫IO超陆、打開、關(guān)閉)

2.長鏈接

在我們實(shí)際開發(fā)中浦马,除了即時(shí)通信时呀,如果沒有特殊要求,在請求數(shù)據(jù)的時(shí)候我們可以通過get捐韩、post來請求數(shù)據(jù)退唠,通常是這樣的,我:發(fā)送一個(gè)請求http://192.123.23.2:8888 然后后面拼上你需要的參數(shù)或者放在請求body里面荤胁,然后服務(wù)器接收到請求返回給我一些數(shù)據(jù),如果我不發(fā)送請求屎债,服務(wù)器是不會返送給我數(shù)據(jù)的仅政。當(dāng)然有一些需求是需要一直跟服務(wù)器有數(shù)據(jù)的交換垢油,這個(gè)時(shí)候我們就需要超鏈接了。

隨時(shí)可以接收到服務(wù)器給我的數(shù)據(jù)

3.介紹一些函數(shù)(c語言)

3.1 socket() 函數(shù)
int socket(int domain, int type, int protocol);
  • 1.domain:即協(xié)議域圆丹,又稱為協(xié)議族(family)滩愁。常用的協(xié)議族有,AF_INET辫封、AF_INET6硝枉、AF_LOCAL(或稱AF_UNIX,Unix域socket)倦微、AF_ROUTE等等妻味。協(xié)議族決定了socket的地址類型,在通信中必須采用對應(yīng)的地址欣福,如AF_INET決定了要用ipv4地址(32位的)與端口號(16位的)的組合责球、AF_UNIX決定了要用一個(gè)絕對路徑名作為地址。
  • 2.type:指定socket類型拓劝。常用的socket類型有雏逾,SOCK_STREAM、SOCK_DGRAM郑临、SOCK_RAW栖博、SOCK_PACKET、SOCK_SEQPACKET等等(socket的類型有哪些厢洞?)仇让。
  • 3.protocol:故名思意,就是指定協(xié)議犀变。常用的協(xié)議有妹孙,IPPROTO_TCP、IPPTOTO_UDP获枝、IPPROTO_SCTP蠢正、IPPROTO_TIPC等,它們分別對應(yīng)TCP傳輸協(xié)議省店、UDP傳輸協(xié)議嚣崭、STCP傳輸協(xié)議、TIPC傳輸協(xié)議
3.2 gethostbyname()函數(shù)說明
struct hostent *gethostbyname(const char *name);
//這個(gè)函數(shù)的傳入值是域名或者主機(jī)名懦傍,例如"www.google.cn"等等雹舀。傳出值,是一個(gè)hostent的結(jié)構(gòu)粗俱。如果函數(shù)調(diào)用失敗说榆,將返回NULL。
/*
返回hostent結(jié)構(gòu)體類型指針
    struct hostent
    {
        char    *h_name;               
        char    **h_aliases;
        int     h_addrtype;
        int     h_length;
        char    **h_addr_list;
        #define h_addr h_addr_list[0]
    };
*/
3.3 connect() 函數(shù)
int connect(int, const struct sockaddr *, socklen_t)

connect函數(shù)的第一個(gè)參數(shù)即為客戶端的socket描述字,第二參數(shù)為服務(wù)器的socket地址签财,第三個(gè)參數(shù)為socket地址的長度串慰。客戶端通過調(diào)用connect函數(shù)來建立與TCP服務(wù)器的連接

不多嗶嗶唱蒸,進(jìn)入正題 (上代碼)

    NSString *host = @"123.2.3.1";
    NSNumber *port = @8888; //?< 端口
  
  //創(chuàng)建socket 返回的int 就象文件句柄一樣 我們直接用這個(gè)descriptor來操作socket
    int socketFileDescriptor = socket(AF_INET, SOCK_STREAM, 0);
    if (socketFileDescriptor == -1) {
        NSLog(@"創(chuàng)建失敗");
        return;
    }
    //創(chuàng)建一個(gè)結(jié)構(gòu)體 gethostbyname函數(shù)根據(jù)域名解析出服務(wù)器的ip地址邦鲫,它返回一個(gè)結(jié)構(gòu)體struct hostent:
    /*
     * Structures returned by network data base library.  All addresses are
     * supplied in host order, and returned in network order (suitable for
     * use in system calls).
     */
    struct hostent *remotehostEnt = gethostbyname([host UTF8String]);
    if (remotehostEnt == NULL) {
        close(socketFileDescriptor);
        NSLog(@"無法解析服務(wù)器主機(jī)名");
        return;
    }
    
    //結(jié)構(gòu)體指針 指向list of addresses from name server 服務(wù)器列表的第一位 即為h_addr_list[0],表示第一個(gè)地址神汹,這個(gè)符號其實(shí)是兼容老系統(tǒng)而存在的
    struct in_addr *remoteIndAddr = (struct in_addr *)remotehostEnt -> h_addr;
    
    //設(shè)置socket參數(shù)
    struct sockaddr_in socketParamers;
    socketParamers.sin_family = AF_INET; //?< internetwork: UDP, TCP
    socketParamers.sin_addr = *remoteIndAddr; //?< 主機(jī)地址
    socketParamers.sin_port = htons([port intValue]);
    //連接socket
    int result = connect(socketFileDescriptor, (struct sockaddr *) &socketParamers, sizeof(socketParamers));
    
    if (result == -1) {
        close(socketFileDescriptor);
        NSLog(@"連接失敗");
        return;
    }
    NSLog(@"連接成功");
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庆捺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子屁魏,更是在濱河造成了極大的恐慌滔以,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚁堤,死亡現(xiàn)場離奇詭異醉者,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)披诗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門撬即,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呈队,你說我怎么就攤上這事剥槐。” “怎么了宪摧?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵粒竖,是天一觀的道長。 經(jīng)常有香客問我几于,道長蕊苗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任沿彭,我火速辦了婚禮朽砰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喉刘。我一直安慰自己瞧柔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布睦裳。 她就那樣靜靜地躺著造锅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪廉邑。 梳的紋絲不亂的頭發(fā)上哥蔚,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天倒谷,我揣著相機(jī)與錄音,去河邊找鬼肺素。 笑死恨锚,一個(gè)胖子當(dāng)著我的面吹牛宇驾,可吹牛的內(nèi)容都是我干的倍靡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼课舍,長吁一口氣:“原來是場噩夢啊……” “哼塌西!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起筝尾,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤捡需,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后筹淫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體站辉,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年损姜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饰剥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摧阅,死狀恐怖汰蓉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棒卷,我是刑警寧澤顾孽,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站比规,受9級特大地震影響若厚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜒什,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一测秸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吃谣,春花似錦乞封、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仔戈,卻和暖如春关串,著一層夾襖步出監(jiān)牢的瞬間拧廊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工晋修, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吧碾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓墓卦,卻偏偏與公主長得像倦春,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子落剪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

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

  • 1三個(gè)相關(guān)數(shù)據(jù)結(jié)構(gòu). 關(guān)于socket的創(chuàng)建睁本,首先需要分析socket這個(gè)結(jié)構(gòu)體,這是整個(gè)的核心忠怖。 104 str...
    ice_camel閱讀 2,806評論 1 8
  • 一呢堰、網(wǎng)絡(luò)各個(gè)協(xié)議:TCP/IP、SOCKET凡泣、HTTP等 網(wǎng)絡(luò)七層由下往上分別為物理層枉疼、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層鞋拟、傳輸層...
    杯水救車薪閱讀 2,260評論 0 17
  • 最近在學(xué)習(xí)Python看了一篇文章寫得不錯(cuò)骂维,是在腳本之家里的,原文如下严卖,很有幫助: 一席舍、網(wǎng)絡(luò)知識的一些介紹 soc...
    qtruip閱讀 2,692評論 0 6
  • 1、網(wǎng)絡(luò)中進(jìn)程之間如何通信哮笆? 2来颤、Socket是什么? 3稠肘、socket的基本操作 3.1福铅、socket()函數(shù) ...
    一字碼閱讀 696評論 0 8
  • 連寫日記都得設(shè)置個(gè)番茄時(shí)間來限制。最近也仿佛像個(gè)編輯一樣项阴,天天碼字滑黔。可寫的都不是我想寫的环揽,流出的墨水也都是復(fù)制粘貼...
    在北京吃葫蘆閱讀 303評論 0 0