美文网首页
Socket详解《一》

Socket详解《一》

作者: 冰棍儿好烫嘴 | 来源:发表于2019-02-28 10:55 被阅读0次

本文使用最基础的socket API实现客户端和服务端的通信。

socket 是c语言的API,使用过程中使用到大量的c语言语法,在过程中会一一描述

需要倒入的头文件:

#import  <sys/socket.h>

#import <netinet/in.h>

#import <arpa/inet.h>

socket通信一般分为四个步骤:

1、创建socket并连接服务器

   //1创建socket
    //第一个参数:domain 协议簇 制定IPv4或者IPv6
    //第二个参数:Type socket类型 流socket 数据报socket
    //第三个参数:协议类型 TCP/UDP
    int clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

自己调试的时候,可以使用终端创建本地服务,本机IP是127.0.0.1 ,端口号可以自己创建,使用nc -lk 端口号来创建端口。本文中对应的端口号为12345.

  //连接服务器
   //创建一个sockaddr_in类型(为结构体)的地址,包含domain 协议簇 IP 端口号 字节顺序 等信息
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    //调整字节顺序,从大到小或者从小到大。要和后台和其他端一致
    addr.sin_port = htons(12345);
    //连接
    //第一个参数:socket的描述符
    //第二个参数:结构体 sockaddr_in类型的地址
    //第三个参数:结构体长度 sizeof()
    int result = connect(clientSocket, (const struct sockaddr *) &addr, sizeof(addr));

connect函数会返回一个int类型的值。0为连接成功,!=为对应的错误码,可以在百度词条搜索connect查看错误码对应的问题

2、发送数据

  //发送数据
    /**
     参数:
     带一个参数:socket
     第二个参数:要发送的数据的指针
     第三个:数据的大小,字符数
     第四个:是否要阻塞线程,一般填0
     */
    
    const char * str = sendMsg.UTF8String;
    ssize_t sendCount = send(self.clientSocket, str, strlen(str), 0);
     //返回值:成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中
    NSLog(@"发送的字节数 %zd",sendCount);

3、接收服务器数据

  //接受服务器返回的数据
    /**
     带一个参数:socket
     第二个参数:接受的字节数组
     第三个:数据的大小,字符数
     第四个:是否要阻塞线程,一般填0
     */
    
    uint8_t buffer[1024];
    ssize_t recvCont = recv(self.clientSocket, buffer, sizeof(buffer), 0);
    //把字节数组转换成字符串
    NSData * recvData = [NSData dataWithBytes:buffer length:recvCont];
    NSString * recvMsg = [[NSString alloc]initWithData:recvData encoding:NSUTF8StringEncoding];
    //    NSLog(@"收到的数据:%@",recvMsg);

4、关闭连接

    //关闭连接
    close(self.clientSocket);

通过以上4个步骤就能实现客户端和服务端简单的相互通信。
下面贴上效果图


手机端效果 终端效果

相关文章

  • Socket详解(四)

    Socket详解(一)Socket详解(二)Socket详解(三) 前三篇文章已经分别介绍了传输层、网络层、网络接...

  • Socket详解(三)

    Socket详解(一) Socket详解(二) 前两篇文章已经分明介绍传输层与网络层;本篇文章介绍链路层。 介绍链...

  • Python高阶(四) - Socket编程

    [TOC] Python Socket 编程详解 Python 提供了两个基本的 socket 模块: Socke...

  • Socket详解《一》

    本文使用最基础的socket API实现客户端和服务端的通信。 socket 是c语言的API,使用过程中使用到大...

  • Socket详解(一)

    光会使用Socket的接口(API)去进行基础编程是远远不够的,我们还必须还要了解整个网络通信的传输流程。OSI开...

  • iOS知识点收集

    一、socket详解 http://www.coderyi.com/archives/429 二、autolayo...

  • socket详解

    socket详解:https://blog.csdn.net/hdfqq188816190/article/det...

  • Http

    来源于:http详解 关于Socket,谈谈TCP/IP 和 UDP的理解 Socket是一个用于传输网络数据的工...

  • Socket详解

    在客户端/服务器通信模式中,Socket是双方通信通道的抽象封装,用户可通过配置Socket的参数并构建Socke...

  • Socket详解

    说白了,Socket就是服务器跟客户端通讯用的。 网络间如何进行通信? 首先,在网络中,如何判断,“李白”是“李白...

网友评论

      本文标题:Socket详解《一》

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