美文网首页
Socket网络编程

Socket网络编程

作者: 灰斗儿 | 来源:发表于2018-07-22 19:16 被阅读12次

一台设备上会有很多的应用程序,每个应用程序会有各自的端口,一台设备最多有65535个端口。
socket就像是一个小保安,端口就像是一个大门,只有大门有小保安守着才会把门打开,如果无人把手,大门就是关着的。
所谓网络通信就像是打电话,A小区的小保安要给B小区的小保安 寄生日贺卡,必须先打电话过去问问B小保安在不在(尝试连接到服务器),如果不在(端口未开放),就不寄了。如果在,就联系快递发过去(发送消息),对方收到后,写一封感谢信回复给A小保安(请求响应)。
例如IOS 中的AFNetworking,是基与 NSURLConnection,NSURLConnection就是基于Socket。

//
//  ViewController.m
//  SocketDemo
//
//
#import "ViewController.h"
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self initSocket];
}

- (void)initSocket{
//初始化本地socket服务
//参数:协议(ipv4)、传输协议(tcp SOCK_STREAM /udp SOCK_DGRAM)
//请一个小保安
int clientSocket = socket(AF_INET, SOCK_STREAM, 0);

//连接服务器
//参数:客户端socket、包含ip地址和端口的结构体、数据长度
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(80);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
//尝试打电话,看B小保安在不在要寄到的那个大门守着
int connectResult = connect(clientSocket, (const struct sockaddr *)&serverAddr, sizeof(serverAddr));

if (connectResult == 0) {
    NSLog(@"链接成功");
}else{
    NSLog(@"链接失败");
    return;
}
//发送数据
NSString *sendMeg = @"hello world";
//参数:客户端socket、内容地址、内容长度、发送方式标志
//发快递
ssize_t sendResultLen = send(clientSocket, sendMeg.UTF8String, sizeof(sendMeg.UTF8String), 0);
NSLog(@"发送了 %ld字节", sendResultLen);
//接受数据
//参数:客户段socket、内容缓冲区、缓冲区长度、接受方式(0 阻塞等待服务器返回数据)
uint8_t buffer[1024];
//收到感谢信
ssize_t recvResultLen = recv(clientSocket, buffer, sizeof(buffer), 0);
NSLog(@"接受到了%ld字节", recvResultLen);
NSData *data = [NSData dataWithBytes:buffer length:recvResultLen];
NSString *receiveStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", receiveStr);

//关闭链接
close(clientSocket);
}


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


@end

相关文章

  • 许世伟的Go语言基础 第五章总结

    第5章 网络编程 5.1 socket编程 以往socket编程: 建立socket:使用socket()函数。 ...

  • 网络编程

    python学习笔记-网络编程 socket编程: socket()函数:socket.socket([famil...

  • 网络编程

    网络 Socket 基于TCP协议的Socket编程 基于UDP协议的Socket编程

  • 2018-09-12 day18-网络编程和http请求

    网络编程 socket 网络编程就是socket编程,socket就是套接字,就是进行数据通信的两端(服务器和客户...

  • 网络基础介绍

    网络编程的两种 TCP socket编程,是网络编程的主流。之所以叫Tcp socket编程,是因为底层是基于Tc...

  • Go语言的Socket编程

    我们在日常开发当中,几乎所有网络编程都是Socket编程,因为大部分底层网络的编程都离不开Socket编程。 什么...

  • 动脑学院架构篇-Java Socket编程基础及深入讲解

    【Socket】Java Socket编程基础及深入讲解 Socket是Java网络编程的基础,了解还是有好处的,...

  • Python网络编程

    Python网络编程 1、socket编程, 类:socket 1.server端 # socket第一个参数:地...

  • TCP通信网络编程

    1. Socket网络编程 Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链...

  • Netty

    一、网络编程基础原理 1 网络编程(Socket)概念 首先注意,Socket不是Java中独有的概念,而是一个语...

网友评论

      本文标题:Socket网络编程

      本文链接:https://www.haomeiwen.com/subject/khkrmftx.html