Socket聊天

Socket-“套接字”給我們提供了發(fā)送和接收信息的接口把跨,通過這個接口能夠?qū)崿F(xiàn)客戶端和服務(wù)端的通信。Socket是對TCP/IP的封裝,方便了程序員的使用编兄。

1.首先,我們要建立一個Socket對象声登,通過如下的函數(shù)實現(xiàn):

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

domain:協(xié)議族或者協(xié)議域狠鸳,決定Socket的地址類型;type:Socket的類型悯嗓;protocal:指定的協(xié)議件舵,常用的有TCP,UDP傳輸協(xié)議脯厨。返回值大于0的時候铅祸,表示創(chuàng)建成功。

2.建立連接

int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR *name,int namelen);

SOCKET s:客戶端Socket合武;第二個參數(shù)指向一個數(shù)據(jù)結(jié)構(gòu)的指針临梗,它包括路目的地的端口和IP涡扼;第三個參數(shù):該結(jié)構(gòu)體的長度。返回值為0表示連接成功夜焦。

3.接下來就是發(fā)送和接收指令:

ssize_t send(int,const void *,size_t,int)

第一個參數(shù)表示Socket壳澳,第二個參數(shù)表示發(fā)送內(nèi)容的地址,第三個參數(shù)表示發(fā)送內(nèi)容的長度茫经,最后一個為標(biāo)志位巷波。

ssize_t send(int,void *,size_t,int)

參數(shù)和發(fā)送差不多,第二個參數(shù)表示接受內(nèi)容的緩沖地址卸伞。

4.斷開連接

int close(int)

Demo如下:

//連接到服務(wù)器

-(BOOL)connentToHost:(NSString*)host port:(int)port{

//創(chuàng)建Socket對象

self.clientSocket=socket(AF_INET,SOCK_STREAM,0);

//端口和IP地址的結(jié)構(gòu)體

structsockaddr_inseverAddress;

severAddress.sin_family=AF_INET;

severAddress.sin_addr.s_addr=inet_addr(host.UTF8String);

severAddress.sin_port=htons(port);

return(connect(self.clientSocket, (conststructsockaddr*)&severAddress,sizeof(severAddress))==0);

}

//發(fā)送和接收

-(NSString*)sendAndRecv:(NSString*)message

{

ssize_tsendLen=send(self.clientSocket, message.UTF8String,strlen(message.UTF8String),0);

//緩沖

uint8_tbuffer[1024];

ssize_trecLen=recv(self.clientSocket, buffer,sizeof(buffer),0);

NSLog(@"buffer=%hhu",buffer[0]);

NSData*data=[NSDatadataWithBytes:bufferlength:recLen];

NSString*str=[[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];

returnstr;

}

//單擊連接

-(void)conn{

BOOLresult=[selfconnentToHost:self.hostText.textport:self.portText.text.intValue];

self.recText.text=result?@"成功":@"失敗";

}

//單擊發(fā)送

-(void)send{

self.recText.text=[selfsendAndRecv:self.msgText.text];

}

-(void) disconnection{

close(self.clientSocket);

}

打開終端抹镊,調(diào)試如下:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荤傲,隨后出現(xiàn)的幾起案子垮耳,更是在濱河造成了極大的恐慌,老刑警劉巖遂黍,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件终佛,死亡現(xiàn)場離奇詭異,居然都是意外死亡雾家,警方通過查閱死者的電腦和手機(jī)铃彰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芯咧,“玉大人牙捉,你說我怎么就攤上這事【挫” “怎么了邪铲?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長无拗。 經(jīng)常有香客問我带到,道長,這世上最難降的妖魔是什么英染? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任阴孟,我火速辦了婚禮,結(jié)果婚禮上税迷,老公的妹妹穿的比我還像新娘永丝。我一直安慰自己,他們只是感情好箭养,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布慕嚷。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喝检。 梳的紋絲不亂的頭發(fā)上嗅辣,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音挠说,去河邊找鬼澡谭。 笑死,一個胖子當(dāng)著我的面吹牛损俭,可吹牛的內(nèi)容都是我干的蛙奖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼杆兵,長吁一口氣:“原來是場噩夢啊……” “哼雁仲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起琐脏,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤攒砖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后日裙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吹艇,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年昂拂,在試婚紗的時候發(fā)現(xiàn)自己被綠了受神。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡政钟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出樟结,到底是詐尸還是另有隱情养交,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布瓢宦,位于F島的核電站碎连,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏驮履。R本人自食惡果不足惜鱼辙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玫镐。 院中可真熱鬧倒戏,春花似錦、人聲如沸恐似。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至葛闷,卻和暖如春憋槐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淑趾。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工阳仔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扣泊。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓近范,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旷赖。 傳聞我的和親對象是個殘疾皇子顺又,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

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