zoukankan      html  css  js  c++  java
  • socket

    //

    //  ViewController.m

    //  B01-socket

    //

    //  Created by Lihongqiang on 16/6/27.

    //  Copyright (c) 2016 itcast. All rights reserved.

    //

     

    #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.

        

        //1 创建socket

        //第一个参数  domain  协议域 AF_INET ip地址和端口 ipv4

        //第二个参数  type  指定socket的类型

                //1 流式socket   传输层 使用tcp

                //2 数据报式 socket  传输层 使用udp协议

        //第三个参数  socket使用的协议

    //    socket(AF_INET, SOCK_STREAM, 0);

        

        //返回socket的描述符

        int clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

        

        //2 连接到服务器

        //第一个参数 socket的描述符

        //第二个参数  sockaddr  提供服务器的ip地址和端口

        //第三个参数  sockaddr 的长度 sizeof

        //返回值  0 成功   0 失败

        

        struct sockaddr_in serverAdd;

        serverAdd.sin_family = AF_INET;

        serverAdd.sin_port = htons(12345);   //16   8   8       8  8

        serverAdd.sin_addr.s_addr = inet_addr("127.0.0.1") ;

        

        int result = connect(clientSocket, (const struct sockaddr *)&serverAdd, sizeof(serverAdd));

        if (result == 0) {

            NSLog(@"成功");

        }else{

            NSLog(@"失败");

        }

        

        //3 发数据

    //    第一个参数指定发送端套接字描述符;

    //    第二个参数指明一个存放应用程式要发送数据的缓冲区;

    //    第三个参数指明实际要发送的数据的字符数;

    //    第四个参数一般置0

        

        //返回实际发送的字节个数

        const char *msg = "aaaa你好接收到得字节个数";

        //发送失败  返回-1

        //strlen  获取的是字符个数  sizeof获取的是字节数

        ssize_t sendLen = send(clientSocket, msg, strlen(msg), 0);

        NSLog(@"发送的字节个数:%zd",sendLen);

        

        //4 接收数据

        char buffer[1024];

        //等待服务器返回数据    阻塞

        ssize_t recvLen = recv(clientSocket, buffer, sizeof(buffer), 0);

        NSLog(@"接收到得字节个数:%zd",recvLen);

        

        //把字节数组转换成字符串

        NSData *data = [NSData dataWithBytes:buffer length:recvLen];

        NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

        

    //    NSString *str = [NSString stringWithCString:buffer encoding:NSUTF8StringEncoding];

        NSLog(@"%@",str);

        

        //5 关闭

        close(clientSocket);

    }

     

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     

    @end

     

     

     

     

  • 相关阅读:
    ELK 收集 K8S (containerd 容器运行时) 二
    EFK 收集 Docker 日志
    ELK 收集 Docker 日志
    ELK 收集 K8S (containerd 容器运行时) 三
    Java 基础(Stream APl)
    Java 基础(方法引用 Method References)
    Java 基础(Lambda表达式 和 函数式 Functional 接口)
    Java 基础(Stream APl) 二
    ELK 收集 K8S (containerd 容器运行时) 一
    部署 Harbor 2.4.1
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5596022.html
Copyright © 2011-2022 走看看