文件:http://www.cocoachina.com/ios/20160602/16572.html
socket(套接字)是通訊的基石,是支援TCP/IP協議的網路通訊的基本操作單元,包含進行網路通訊必須的五種資訊:連線使用的協議,本地主機的IP地址,本地程式的協議埠,遠地主機的IP地址,遠地程式的協議埠。
多個TCP連線或多個應用程式程式可能需要通過同一個TCP協議埠傳輸資料。為了區別不同的應用程式程式和連線,計算機作業系統為應用程式與TCP/IP協議互動提供了套接字(Socket)介面。應用層可以和傳輸層通過Socket介面,區分來自不同應用程式程式或網路連線的通訊,實現資料傳輸的併發服務。
建立Socket連線至少需要一對套接字,其中一個執行於客戶端,稱為ClientSocket,另一個執行於伺服器端,稱為ServerSocket。套接字之間的連線過程分為三個步驟:伺服器監聽,客戶端請求,連線確認。
Socket可以支援不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連線時,該Socket連線就是一個TCP連線,UDP連線同理。
使用第三方框架:CocoaAsyncSocket
不會寫伺服器,用Tomcat進行測試,只能測試到連線成功以及斷開連線,而且真機環境下,可能因為網路環境原因也同樣訪問不了:
注意:讀寫資料時需要手動進行。
//-1表示沒有time限制
[self.socket writeData:[NSData data] withTimeout:-1 tag:0];
[self.socket readDataWithTimeout:-1 tag:0];
- (IBAction)SocketConnection:(UIButton *)sender { //http://localhost:8080/ NSString *host = @"10.1.1.33"; int port = 8080; _socket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSError *error = nil; //[_socket connectToHost:host onPort:port error:&error ]; [_socket connectToHost:host onPort:port withTimeout:15000000 error:&error]; if (error) { NSLog(@"%@",error); } } -(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{ NSLog(@"%s,%@",__func__,@"連線成功"); } -(void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{ if (err) { NSLog(@"異常斷開-%@",err); }else{ NSLog(@"正常斷開"); } } -(void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag{ NSLog(@"寫資料"); } -(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ NSLog(@"讀資料"); }