iOS

Socket聊天

2017-03-23  本文已影响15人  subject_2619

Socket-“套接字”给我们提供了发送和接收信息的接口,通过这个接口能够实现客户端和服务端的通信。Socket是对TCP/IP的封装,方便了程序员的使用。

1.首先,我们要建立一个Socket对象,通过如下的函数实现:

int socket(int domain,int type,int protocal);

domain:协议族或者协议域,决定Socket的地址类型;type:Socket的类型;protocal:指定的协议,常用的有TCP,UDP传输协议。返回值大于0的时候,表示创建成功。

2.建立连接

int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR *name,int namelen);

SOCKET s:客户端Socket;第二个参数指向一个数据结构的指针,它包括路目的地的端口和IP;第三个参数:该结构体的长度。返回值为0表示连接成功。

3.接下来就是发送和接收指令:

ssize_t send(int,const void *,size_t,int)

第一个参数表示Socket,第二个参数表示发送内容的地址,第三个参数表示发送内容的长度,最后一个为标志位。

ssize_t send(int,void *,size_t,int)

参数和发送差不多,第二个参数表示接受内容的缓冲地址。

4.断开连接

int close(int)

Demo如下:

//连接到服务器

-(BOOL)connentToHost:(NSString*)host port:(int)port{

//创建Socket对象

self.clientSocket=socket(AF_INET,SOCK_STREAM,0);

//端口和IP地址的结构体

structsockaddr_inseverAddress;

severAddress.sin_family=AF_INET;

severAddress.sin_addr.s_addr=inet_addr(host.UTF8String);

severAddress.sin_port=htons(port);

return(connect(self.clientSocket, (conststructsockaddr*)&severAddress,sizeof(severAddress))==0);

}

//发送和接收

-(NSString*)sendAndRecv:(NSString*)message

{

ssize_tsendLen=send(self.clientSocket, message.UTF8String,strlen(message.UTF8String),0);

//缓冲

uint8_tbuffer[1024];

ssize_trecLen=recv(self.clientSocket, buffer,sizeof(buffer),0);

NSLog(@"buffer=%hhu",buffer[0]);

NSData*data=[NSDatadataWithBytes:bufferlength:recLen];

NSString*str=[[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];

returnstr;

}

//单击连接

-(void)conn{

BOOLresult=[selfconnentToHost:self.hostText.textport:self.portText.text.intValue];

self.recText.text=result?@"成功":@"失败";

}

//单击发送

-(void)send{

self.recText.text=[selfsendAndRecv:self.msgText.text];

}

-(void) disconnection{

close(self.clientSocket);

}

打开终端,调试如下:

上一篇 下一篇

猜你喜欢

热点阅读