Socket連線例項

2021-07-02 04:11:22 字數 2660 閱讀 1804

今天我們來學習下如何在ios中使用socket連線,幸運的是,感謝github,我們找到乙個第三方的開源類庫可以很方便的幫我們實現這個,接下來我們就來實現一下,不過這次雖然有圖形介面,但我們沒有新增任何東西。

首先說一下這裡server端是用python寫的,簡單的寫了乙個,**如下:

[python]view plain

copy

#!/usr/bin/env python

#-*-coding:utf-8-*-

import

socket  

defgetinfo():  

address=('127.0.0.1'

,8888

)  sock=socket.socket(socket.af_inet,socket.sock_stream)  

sock.bind(address)  

sock.listen(5

)  client,addr=sock.accept()  

print

'connected with'

,addr  

client.send(b'hi there'

)  ra=sock.recv(1024

)  print

ra  

client.close()  

sock.close()  

#end def

if__name__==

'__main__'

:  getinfo()  

因為mac系統下預設是安裝了python的,正好也能把python練習一下,活學活用。

然後說下我們使用的第三方庫,asyncsocket ,那麼我們去git上把它clone出來。

接著我們就開始寫ios端了,首先新建乙個專案,新增cfnetwork.framework到專案中。

然後在我們的專案中把asyncsocket新增進來:

然後我們在etviewcontroller.h中新增以下**:

[cpp]view plain

copy

#import 

#import "asyncsocket.h"

@inte***ce etviewcontroller : uiviewcontroller    

接下來是etviewcontroller.m中的**:

[cpp]view plain

copy

#import "etviewcontroller.h"

@inte***ce etviewcontroller ()  

@end  

@implementation etviewcontroller  

- (id)initwithnibname:(nsstring *)nibnameornil bundle:(nsbundle *)nibbundleornil  

return

self;  

}  - (void

)viewdidload  

}  //建立連線

-(void

)onsocket:(asyncsocket *)sock didconnecttohost:(nsstring *)host port:(uint16)port  

//讀取資料

-(void

)onsocket:(asyncsocket *)sock didreaddata:(nsdata *)data withtag:(

long

)tag  

//是否加密

-(void

)onsocketdidsecure:(asyncsocket *)sock  

//遇到錯誤時關閉連線

-(void

)onsocket:(asyncsocket *)sock willdisconnectwitherror:(nserror *)err  

//斷開連線

-(void

)onsocketdiddisconnect:(asyncsocket *)sock  

- (void

)didreceivememorywarning  

-(void

)dealloc  

@end  

這些完成了之後呢,我們就可以開始測試了,那麼首先要啟動python寫的server,進入終端,進入到pyserver.py所在的目錄,然後輸入如下命令來啟動server:

[python]view plain

copy

python pyserver.py  

之後回車,server就啟動了,然後我們就可以啟動ios模擬器來進行除錯了,可以收到如下圖所示的回應資訊,說明我們成功了:

ok,今天的知識就學到這裡,那麼隨著時間的積累,同時自己也在學tornado,那麼希望可以用python為ios寫出更好的服務端。

2023年06月23日,eric.tang 記

Socket連線 TCP UDP HTTP連線詳解

我們在傳輸資料時,可以只使用 傳輸層 tcp ip協議,但是那樣的話,如果沒有應 用層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用到應用層協議,應用層協議有很多,比如http ftp telnet等,也可以自己 定義應用層協議。web使用http協議作應用層協議,以封裝http文字資...

Socket連線 TCP UDP HTTP連線詳解

我們在傳輸資料時,可以只使用 傳輸層 tcp ip協議,但是那樣的話,如果沒有應 用層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用到應用層協議,應用層協議有很多,比如http ftp telnet等,也可以自己 定義應用層協議。web使用http協議作應用層協議,以封裝http文字資...

Socket程式設計例項

struct sockaddr sockaddr定義的標頭檔案 sys socket.h struct sockaddr in sockaddr in解決了sockaddr 的缺陷,實際上相當於把sockaddr 中的sa data分成了3個部分 sockaddr in 定義的標頭檔案 netine...