一.项目添加ASyncSocket
1.下载ASyncSocket库源码
2.把ASyncSocket库源码加入项目(见附件)
3.在项目增加CFNetwork框架
二、具体使用代码如下:
导入:#import "AsyncSocket.h"
//发送短消息
-(IBAction)sendString
{
NSData *data = [@"test\n" dataUsingEncoding: NSUTF8StringEncoding];
static BOOL connectOK = NO
if (!_sendSocket)
{
self.sendSocket = [[AsyncSocket alloc] initWithDelegate: self];
NSError *error;
connectOK = [_sendSocket connectToHost: @"127.0.0.1" onPort: 8000 error: &error];
if (!connectOK)
{
[self showAlert:@"连接失败"];
}else{
DLog(@"connect success!");
}
[_sendSocket setRunLoopModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
}
if (connectOK)
{
[_sendSocket writeData:data withTimeout: -1 tag: 0];
}
}
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
DLog(@"%s %d", __FUNCTION__, __LINE__);
[_sendSocket readDataWithTimeout: -1 tag: 0];
}
- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag
{
DLog(@"%s %d, tag = %ld", __FUNCTION__, __LINE__, tag);
[_sendSocket readDataWithTimeout: -1 tag: 0];
}
- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
{
DLog(@"%s %d, tag = %@", __FUNCTION__, __LINE__, err);
}
// 这里必须要使用流式数据
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
NSString *msg = [[NSString alloc] initWithData: data encoding:NSUTF8StringEncoding];
DLog(@"%s %d, ==读取到从服务端返回的内容=== %@", __FUNCTION__, __LINE__, msg);
[_sendSocket readDataWithTimeout: -1 tag: 0];
}
- (void)onSocketDidDisconnect:(AsyncSocket *)sock
{
DLog(@"%s %d", __FUNCTION__, __LINE__);
self.sendSocket = nil;
}
java服务端的代码如下:
public class Server {
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server()
{
try
{
ss = new ServerSocket(8000);
System.out.println("The server is waiting your input...");
while(true)
{
socket = ss.accept();
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
String line = in.readLine();
System.out.println("you input is : " + line);
out.println("server back input is :" + line);
out.flush();
out.close();
in.close();
socket.close();
if(line.equals("exit"))
break;
}
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
new Server();
}
}
注意:向客户端写数据时最后需要加上\n,不然很久都不会得到服务端的返回。
上面为普通的socket服务端,最近项目采用apache mina框架建后台的socket服务端,采用上面的asyncSocket一直连接不上服务器,也在网上查询了大量的资料,最终发现需要在写入的数据后面加上0字符才能连接成功,或者采用gzip压缩后再传入服务器。ios的gzip压缩请见下一博客。
NSString *requestStrFrmt = @"发送到服务端数据";
NSData *requestData = [requestStrFrmt dataUsingEncoding:NSUTF8StringEncoding];
Byte *testByte = (Byte *)[requestData bytes];
Byte bytes[requestData.length+1];
for(int i=0;i<[requestData length];i++){
bytes[i]=testByte[i];
}
bytes[requestData.length]=0;
NSData *adata = [[NSData alloc] initWithBytes:bytes length:requestData.length+1];
[asyncSocketwriteData:adata withTimeout:-1.0tag:0];
这样服务端就能正常的读取到数据并返回了
相关推荐
在iOS开发中,网络通信是应用的核心功能之一,而AsyncSocket库是Objective-C编写的一个强大的TCP套接字通信框架。本文将深入探讨基于AsyncSocket进行二次开发的关键知识点,包括其基本概念、工作原理、核心API以及...
使用AsyncSocket可以很方便的与其它系统进行Socket通信, AsyncSocket包括TCP和UDP,通过实现委托AsyncSocketDelegate进行交互。 首先,调用此API时需先引入CFNetWork.framework 然后在#import "AsyncSocket.h"就...
在iOS中,通常会使用CocoaAsyncSocket库来简化Socket编程,正如压缩包中的文件"AsyncSocket"所示。CocoaAsyncSocket是由Dean Wombourne开发的一个强大的Objective-C类库,它封装了低级别的Socket API,提供了异步...
AsyncSocket是一个强大的Objective-C库,它简化了在iOS平台上使用Cocoa进行TCP套接字编程的过程。本文将深入探讨如何利用AsyncSocket库构建一个简单的iOS客户端与服务器的通信系统。 首先,我们要了解Socket的基本...
iOS socket编程 asyncsocket
"ios-Socket通信.zip"这个压缩包可能包含了关于如何在iOS平台上使用AsyncSocket库进行Socket通信的示例代码和教程。AsyncSocket是由GCD(Grand Central Dispatch)实现的一个异步Socket库,它简化了Socket编程的复杂...
通过这种方式,我们可以轻松地在iOS应用中使用AsyncSocket进行网络通信,而无需关心Socket的底层细节。这个封装不仅提高了代码的复用性,也降低了开发难度,使开发者能更专注于业务逻辑的实现。
在iOS中,使用AsyncSocket创建TCP服务器和客户端的基本步骤如下: 1. 引入库:首先,你需要将AsyncSocket库添加到你的项目中,可以通过CocoaPods或者手动导入库文件。 2. 初始化:在你的类中引入`AsyncSocket.h`...
本文将详细解析标题为“ios使用socket的例子”的知识点,并基于提供的压缩包文件`robbiehanson-CocoaAsyncSocket-fe662b3`进行讲解。 CocoaAsyncSocket是由Robbie Hanson开发的一个Objective-C库,它为iOS和macOS...
在iOS开发中使用socket,一般都是用第三方库AsyncSocket,不得不承认这个库确实很强大。下载地址CocoaAsyncSocket 。 特性 AsyncSocket类是支持TCP的。 AsyncUdpSocket是支持UDP的。 AsyncSocket是封装了CFSocket和...
本知识点将深入探讨如何使用第三方库AsyncSocket实现iOS中的Socket通信,以及如何通过提供的两个demo理解Socket的工作原理。 AsyncSocket是由CocoaAsyncSocket项目提供的一个强大的Objective-C类,它简化了iOS和Mac...
总之,`AsyncSocket`是一个强大的工具,可以帮助iOS开发者高效、便捷地进行Socket编程。通过学习和掌握这个库,你可以创建出更加健壮、响应迅速的网络应用程序。记得参考`Reference_AsyncSocket.htm`中的文档,以...
AsyncSocket是iOS平台上一个强大的Objective-C库,专为简化Socket通信而设计。它提供了一种高效、易用的方式来实现客户端和服务器之间的低级网络通信。这个库由Jon Reid开发,并在开源社区中广受欢迎,因为它封装了...
在iOS中,通常使用BSD Socket API来创建和管理Socket连接。 1. **创建Socket连接**: - iOS客户端首先需要初始化一个Socket实例,通过`CFStreamCreatePairWithSocketToHost()`函数创建到服务器的TCP连接。 - 连接...
本示例"iOS_Socket_Demo"主要展示了如何使用AsyncSocket库在iOS平台上构建一个客户端和服务器,实现两者之间的实时数据交换。 首先,我们要理解什么是Socket。Socket是操作系统提供的一个接口,它允许应用程序通过...
使用`AsyncSocket`首先需要创建一个socket实例,然后调用`connectToHost:onPort:`方法,传入服务器的主机名和端口号。这个过程是异步的,当连接成功或失败时,会触发相应的委托方法。 3. **委托方法**: - `- ...
5. **易于使用**:AsyncSocket通过简单的API设计,使得开发者能够轻松地集成到项目中。例如,`readDataToLength:`和`writeData:`方法用于读写特定长度的数据,`onSocket:didReadData:withTag:`和`onSocket:...
使用AsyncSocket可以很方便的与其它系统进行Socket通信, AsyncSocket包括TCP和UDP,通过实现委托AsyncSocketDelegate进行交互。 首先,调用此API时需先引入CFNetWork.framework 然后在#import "AsyncSocket.h"就可以...