Socket技术
- 基于网络通信
- 和http协议相比(HTTP只定义方法,无实现过程)
- 具体实现过程
- 长连接,HTTP段连接
- HTTP协议是用来做超文本传输
Socket什么都可以传 (所以socket更加底层)
iOS (socket实现的框架)
- GCDAsyncSocket <= GFNetwork <= sys/socket.h
NSNetService
socket技术
- tcp/ip和udp
- tcp/ip 传输控制协议
- udp 广播类型协议
- tcp/ip 会更加安全,三次握手的过程是在传输数据
- udp 的速度更快,不可靠性大,传输效率慢(经常出错)
客户端
{
//计算机地址
struct sockaddr_in server;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
int error = -1;
//
int client_flag = socket(AF_INET, SOCK_STREAM, 0);
server.sin_port = htons(10000);
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("172.18.16.50");
error = connect(client_flag, (struct sockaddr *)&server, sizeof(server));
send(client_flag, "%¥#%&*&#¥%……&*(*&……%¥", 40, -1); //字符串的大小为40
char buff[1024];
int length = recv(client_flag, buff, (long)1024, -1);
buff[length] = '\0';
printf("%s",buff);
close(client_flag);
return YES;
}
服务端
{
//服务端的标识
int server_flag;
//客户端的标识
int client_flag;
//计算机地址
struct sockaddr_in addr;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
int error = -1;//用来判定是否绑定成功
//服务端
//1、创建服务端的标识符,是int型的(用来判断是客户还是服务)
server_flag = socket(AF_INET, SOCK_STREAM, 0);//网络类型(ipv4),协议
//2、将服务端的标识符,绑定到一个具体的计算机(ip,port共同制定一个具体的计算机)里
addr.sin_port = htons(2345);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
error = bind(server_flag, (struct sockaddr *)&addr, sizeof(addr));
//3、服务端要做好能同时处理多少个链接的事情
error = listen(server_flag, 100); //哪个服务端,多少个
//4、服务端要做好等待客户端链接请求的准备
while (1) {
//5、将收到的客户端链接请求生成一个标志位,作为某个客户端的标识(一个标志位对应一个客户端)
client_flag = accept(server_flag, NULL, NULL);
//6、通过客户端标识位进行消息传输
char buff[1024];
int length = recv(client_flag, buff, (long)1024, -1);
buff[length] = '\0';
printf("client say:%s",buff);
//发送消息
send(client_flag, "hello", 80, -1);
//7、关闭取消链接的客户端标识位
close(client_flag);
}
return YES;
}