最后为了造福大家,笔者附上完整 的代码,头文件如下:

//

//  BSDHttpExampleViewController.h

//  BSDHttpExample

//

//  Created by sun dfsun2009 on 09-11-12.

//  Copyright __MyCompanyName__ 2009. All rights reserved.

//

#import <UIKit/UIKit.h>

#define MYPORT 4880

#import <stdio.h>

#import <stdlib.h>

#import <unistd.h>

#import <arpa/inet.h>

#import <sys/types.h>

#import <sys/socket.h>

#import <netdb.h>

@interface BSDHttpExampleViewController : UIViewController {

int sockfd;

struct sockaddr_in their_addr;

}

@end

实现文件如下:

//

//  BSDHttpExampleViewController.m

//  BSDHttpExample

//

//  Created by sun dfsun2009 on 09-11-12.

//  Copyright __MyCompanyName__ 2009. All rights reserved.

//

#import "BSDHttpExampleViewController.h"

@implementation BSDHttpExampleViewController

#define HTTPMETHOD @"GET"

#define HTTPVERSION @"HTTP/1.1"

#define HTTPHOST @"Host"

#define KENTER @"\r\n"

#define KBLANK @" "

/*

// The designated initializer. Override to perform setup that is required before the view is loaded.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {

// Custom initialization

}

return self;

}

*/

/*

// Implement loadView to create a view hierarchy programmatically, without using a nib.

- (void)loadView {

}

*/

void error_handle(char *errorMsg)

{

fputs(errorMsg, stderr);

fputc('\n',stderr);

exit(1);

}

- (NSMutableString*) makeHttpHeader:(NSString*) hostName

{

NSMutableString *header = [[NSMutableString alloc] init];

[header appendFormat:HTTPMETHOD];

[header appendFormat:KBLANK];

[header appendFormat:@"/index.html"];

[header appendFormat:KBLANK];

[header appendFormat:HTTPVERSION];

[header appendFormat:KENTER];

[header appendFormat:HTTPHOST];

[header appendFormat:@":"];

[header appendFormat:hostName];

[header appendFormat:KENTER];

[header appendFormat:KENTER];

return header;

}

- (NSString*)getIpAddressForHost:(NSString*) theHost

{

struct hostent *host = gethostbyname([theHost UTF8String]);

if(!host)

{

herror("resolv");

return NULL;

}

struct in_addr **list = (struct in_addr **)host->h_addr_list;

NSString *addressString = [NSString stringWithCString:inet_ntoa(*list[0])];

return addressString;

}

- (void)Connect:(NSString *)hostName content:(NSString *)contentSended

{

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

{

perror("socket");

exit(1);

}

//NSHost *host = [NSHost hostWithName:hostName];

//if(host)

//{

their_addr.sin_family = AF_INET;

//their_addr.sin_addr.s_addr = inet_addr([[host address] UTF8String]);

their_addr.sin_addr.s_addr = inet_addr([[self getIpAddressForHost:hostName] UTF8String]);

NSLog(@"getIpAddressForHost :%@",[self getIpAddressForHost:hostName]);

their_addr.sin_port = htons(80);

bzero(&(their_addr.sin_zero), 8);

int conn = connect(sockfd, (struct sockaddr*)&their_addr, sizeof(struct sockaddr));

NSLog(@"Connect errno is :%d",conn);

if(conn != -1)

{

NSLog(@"Then the conn is not -1!");

NSMutableString* httpContent = [self makeHttpHeader:hostName];

NSLog(@"httpCotent is :%@",httpContent);

if(contentSended != nil)

[httpContent appendFormat:contentSended];

NSLog(@"Sended content is :%@",httpContent);

NSData *data = [httpContent dataUsingEncoding:NSISOLatin1StringEncoding];

ssize_t dataSended = send(sockfd, [data bytes], [data length], 0);

if(dataSended == [data length])

{

NSLog(@"Datas have been sended over!");

}

printf("send %d bytes to %s\n",dataSended,inet_ntoa(their_addr.sin_addr));

NSMutableString* readString = [[NSMutableString alloc] init];

char readBuffer[512];

int br = 0;

while((br = recv(sockfd, readBuffer, sizeof(readBuffer), 0)) < sizeof(readBuffer))

{

NSLog(@"read datas length is :%d",br);

[readString appendFormat:[NSString stringWithCString:readBuffer length:br]];

NSLog(@"Hava received datas is :%@",readString);

}

close(sockfd);

}else {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[@"Connection failed to host " stringByAppendingString:hostName] message:@"Please check the hostname in the preferences." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

[alert show];

[alert release];

}

/*

}

else

{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[@"Could not look up host " stringByAppendingString:hostName] message:@"Please check the hostname in the preferences." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

[alert show];

[alert release];

}

**/

}

- (void)Send:(id)sender

{

char message[7] = "aaag";

send(sockfd,message,sizeof(message),0);

NSLog(@"%s",message);

}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)viewDidLoad {

[self Connect:@"www.baidu.com" content:nil];

[super viewDidLoad];

NSLog(@"view has been loaded!");

}

/*

// Override to allow orientations other than the default portrait orientation.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

// Return YES for supported orientations

return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

*/

- (void)didReceiveMemoryWarning {

// Releases the view if it doesn't have a superview.

[super didReceiveMemoryWarning];

// Release any cached data, p_w_picpaths, etc that aren't in use.

}

- (void)viewDidUnload {

// Release any retained subviews of the main view.

// e.g. self.myOutlet = nil;

}

- (void)dealloc {

[super dealloc];

}

@end

转载于:https://blog.51cto.com/no001/558893

iPhone socket 编程之BSD Socket篇相关推荐

  1. 玩转iPhone网络通讯之BSD Socket篇

    玩转iPhone网络通讯之BSD Socket篇 编辑文档 在进行iPhone网络通讯程序的开发中,不可避免的要利用Socket套接字.iPhone提供了Socket网络编程的接口CFSocket,不 ...

  2. socket编程之 accept函数的理解

    在进入我们的正题之前,再来复习一波编写服务器的函数流程吧 服务器端:socket()-->bind( )-->listen()-->accept()-->read()/writ ...

  3. 老雷socket编程之PHP利用socket扩展实现聊天服务

    老雷socket编程之PHP利用socket扩展实现聊天服务 socket聊天服务原理 PHP有两个socket的扩展 sockets和streams sockets socket_create(AF ...

  4. [深入浅出WP8.1(Runtime)]Socket编程之UDP协议

    13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只 ...

  5. 基于Linux的Socket编程之TCP全双工Server-Client聊天程序

    转载:http://blog.csdn.net/apollon_krj/article/details/53437764#0-tsina-1-58570-397232819ff9a47a7b7e80a ...

  6. Linux下socket编程之UDP简单实现

    本文实现一个简单的UDP小例子,来说明Linux下socket编程之UDP的简单实现.本文主要包括三个部分:服务器端的实现,客服端的实现和通信测试.实现的功能:客服端发送一条消息给服务器端,服务器端把 ...

  7. Linux下Socket编程之TCP应用

    现在,我们用前面所构建的socket类,重新设计<Linux下Socket编程之TCP Server端>中echo的服务器,然后设计客户端程序. echo服务器的工作原理很简单: 1.接收 ...

  8. Java处理json编程之Jackson使用篇

    文章目录 Java处理json编程之Jackson使用篇 Jackson概述 使用步骤 场景 1. 数组和json串的互相转换 2. map和json串的互相转换 3. list和json串的互相转换 ...

  9. linux socket编程之TCP与UDP

    转:http://blog.csdn.net/gaoxin1076/article/details/7262482 TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议 TCP/IP虽然叫传输控制 ...

最新文章

  1. R语言使用yardstick包的lift_curve函数评估多分类(Multiclass)模型的性能、并使用autoplot函数可视化模型在每个交叉验证(或者重采样)的每一折fold在每个分类上的提升
  2. 医疗影像网络PACS系统方案
  3. tomcat启动完成执行 某个方法 定时任务(Spring)
  4. html5 jquery mobile,html5 jquery mobile
  5. 95-130-344-源码-source-kafka相关-AbstractFetcher
  6. 三步完成博客打赏功能
  7. 洛谷P1015回文数
  8. 图的点,边和度之间的关系
  9. 济南服务器管理系统方案,物品管理系统和物品管理服务器技术方案
  10. [SDOI2015]寻宝游戏
  11. PDF编辑器哪个好,如何把PDF文件拆分成多个文件
  12. 全国高校计算机能力挑战赛赛事通知
  13. javaOOP -- 笔记
  14. 谷歌浏览器 抖动 chrome 上下抖动 问题解决
  15. Python采集网易云音乐
  16. 交易订单处理失败,请稍后再试(ali64)
  17. 在线版音乐播放器APP
  18. 前端从零开始学习笔记(一)开发工具的安装说明
  19. 解决新版微信个人收款二维码在H5网页里不能长按识别支付
  20. bugku 细心的大象

热门文章

  1. [2019HDU多校第一场][HDU 6590][M. Code]
  2. 使用conda安装pydot及其遇到的问题解决方案
  3. Robberies HDU - 2955
  4. You are running Composer with SSL/TLS protection disabled.
  5. Linux中的防火墙----iptables
  6. fuse的API修改
  7. ActiveMQ消息中间件的作用以及应用场景
  8. 数据结构-编程实现一个双链表的建立,双链表的打印,双链表的测长
  9. Razor传值到js
  10. Asp.Net iframe Cookie 域 的问题!