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);
}
打开终端,调试如下:
网友评论