socket 编程

#import <sys/socket.h>

#import <netinet/in.h>

#import <arpa/inet.h>

#import <unistd.h>

/*

     1 创建Socket

     参数

     domain:协议域AF_INET->IPV4

     type: socket类型SOCK_STREAM(TCP) SOCK_DGRAM(UDP)

     protocol :IPPROTO_TCP,如果写0,就会自动根据第二个参数选择

     返回值 :int socket

     */

   

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

    /*

     2.连接到服务器

     参数

     1>客户端socket

     2>指向结构图sockaddr的指针,其中包括目的端口的IP地址

     3>结构体数据长度

     返回值 : 0 成功  / 其他 错误代号

     */

    struct sockaddr_in serverAddr;

    //端口号

    serverAddr.sin_port = htons(80);

    

    serverAddr.sin_family=AF_INET;

    

    //ip地址 inet_addr函数,可以将ip地址转成一个数字

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

    

    // nc -lk 12345  终端监听端口号12345的数据

    int connResult = connect(clientSocket, (const struct sockaddr *)&serverAddr, sizeof(serverAddr));

    if (connResult == 0) {

        NSLog(@"连接成功");

    }else{

        NSLog(@"连接失败:%d",connResult);

        return;

    }

    

    /*

     3 发送数据

     参数

     1>客户端socket

     2>发送内容地址(指针)

     3>发送内容长度

     4>发生方式标志,一般为0

     返回值

     如果成功,则返回字节数,失败则返回SOCKET_ERROR

     */

    NSString *msg = @"GET / HTTP/1.1\n""Host:www.baidu.com\n\n";

    ssize_t sendlen = send(clientSocket, msg.UTF8String, strlen(msg.UTF8String), 0);

    NSLog(@"发送了 %ld 个字节",sendlen);

    

    /*

     4. 读取数据

     参数

     1>客户端socket

     2>接受内容缓冲区地址

     3>接受内容缓冲区长度

     4>接受方式,0表示阻塞,必须等待服务器返回数据

     返回值

     如果成功 则返回读入的字节数,失败则返回SOCKET_ERROR

     */

    uint8_t buffer[1024];

    size_t recvlen = recv(clientSocket, buffer, sizeof(buffer), 0);

    NSLog(@"接受到了 %ld 个字节", recvlen  );

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

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

    NSLog(@"%@",str);

    

    /*

     5.关闭连接

     */

    close(clientSocket);

转载于:https://www.cnblogs.com/PJXWang/p/9077092.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值