您的位置:首页 > 移动开发 > IOS开发

ios socket编程初步:iphone客户端与java服务端通信

2013-08-30 19:36 501 查看
大家好,这是我的第一个原创教程,下面我们来学习下最基本的SOCKET是怎样在两台电脑上实现数据交换的。
首先是我们的java端:

package com.hcios.socket;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class HCNewServer {

/**
* 1.创建服务器端Socket
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("欢迎来到Socket的世界");
ServerSocket serverSocket=null;

try {
serverSocket=new ServerSocket(5678);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//      input = new InputStreamReader(System.in);
//        bufw = new BufferedReader(input);
//        try {
//            String str =bufw.readLine();
//            bufw2=new BufferedWriter(os);
//            os.print(str);
//           // System.out.print("Show: " + line);
//            bufw2.flush();
//      InputStreamReader input=new InputStreamReader(System.in);
//      BufferedReader br=new BufferedReader(input);
//
int i=0;
while (true)
{
Socket thisClient=null;
try {

System.out.print("等待客户端连接");
//接受方法会阻塞主进程
thisClient= serverSocket.accept();
System.out.println("有客户端请求socket。同意");
while (!thisClient.isClosed()){
//读取socket的输入流
InputStream is=thisClient.getInputStream();
InputStreamReader clientInput=new InputStreamReader(is);
BufferedReader br=new BufferedReader(clientInput);
System.out.println("当前socket客户端的IP地址:"+thisClient.getInetAddress());
String clientStr= br.readLine();
System.out.println("客户端说:"+clientStr);
if (clientStr.equals("goodbye")) {
thisClient.close();
}
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//          读取Input流过程也会阻塞主进程

i++;

}

}

}


然后是我们的客户端(新建一个单视图的工程,需要导入GCDAsyncSoket.h/.m文件和添加相应框架)

controller源代码:

//
//  HCSViewController.m
//  HCSocket
//
//  Created by Reese on 13-8-19.
//  Copyright (c) 2013年 Reese@dctrain. All rights reserved.
//

#import "HCSViewController.h"
#import "GCDAsyncSocket.h"

@interfaceHCSViewController ()

@end

@implementationHCSViewController
GCDAsyncSocket *clientSocket;
- (void)viewDidLoad
{
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//第一步:初始化Socket
clientSocket=[[GCDAsyncSocket alloc]initWithDelegate:selfdelegateQueue:dispatch_get_main_queue()];

//第二步:连接/connect
NSError*err=nil;

[clientSocket connectToHost:@"localhost"onPort:5678 error:&err];
if(err) {
NSLog(@"socket连接函数调用异常:%@",err);
}

//第三步:读或者写  I/O

//客户端 读
//第四步:关闭Socket

}

- (void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

#pragma mark  ------GCDAsyncSocket协议--------
//socket连接建立成功委托协议
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString*)host port:(uint16_t)port
{
NSLog(@"socket连接建立成功,端口号为:%d",port);
}
//socket连接断开委托协议
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError*)err
{
NSLog(@"socket连接建立失败:%@",err);
}

- (void)dealloc {
[_outputText release];
[superdealloc];
}
- (IBAction)sendText:(id)sender {

//客户端 写

NSString*clientText = [_outputText.text stringByAppendingString:@"\n"];

constchar*clientTextData = [clientText cStringUsingEncoding:NSUTF8StringEncoding];

//char dataChar[]="hello,world,I'm a iphone\n";
//    NSString *str=[_outputText.text stringByAppendingString:@"\n"];

NSData*data=[NSDatadataWithBytes:clientTextData length:100];

[clientSocket writeData:data withTimeout:1000 tag:1000];
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: