Socket简介(精通 Socket 养全家)

 0.

    nc -lk 端口号 :始终监听本地计算机此端口的数据.

   

   

    1.导入三个头文件

    {

        #import <sys/socket.h>

        #import <netinet/in.h>

        #import <arpa/inet.h>

    }

   

    2.Socket书写步骤

    {

        1.创建客户端Socket            socket(<#int#>, <#int#>, <#int#>);

        2.创建服务器Socket            struct sockaddr_in serverAddress;

        3.连接到服务器(Socket编程)     connect(<#int#>, <#const struct sockaddr *#>, <#socklen_t#>);

        4.发送数据给服务器            send(<#int#>, <#const void *#>, <#size_t#>, <#int#>)

        5.接收服务器返回的数据          recv(<#int#>, <#void *#>, <#size_t#>, <#int#>)

        6.关闭 Socket                close(socketNumber)

    }

   

    /*

     创建客户端 Socket.

     三个参数: domain:网络地址类型 type:端口类型 protocal:传输协议

    

     domain:协议域 指定socket主机地址类型. 网络层协议 AF_INET/IPv4协议; AF_INET_6/IPv6协议

    

     type:指定Socket端口类型. 指定传输层协议类型(TCP/UDP),SOCK_STREAM(TCP/) ,SOCK_DGRAM(UDP/报文头)

    

     protocal:指定传输协议:常用协议:IPPROTO_TCPIPPROTO_UDP等,分别对应TCP传输协议、UDP传输协议.

    

     最后一个参数传0,会根据第二个参数,自动选择第二个参数对应的协议.

    

     返回值:如果 > 0 表示成功.

     */

   

    // 0.创建客户端 Socket.

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

   

    if (socketNumber > 0) {

        NSLog(@"Socket创建成功:%d",socketNumber);

    }else{

        NSLog(@"Socket创建失败");

    };

   

    /*

     连接到服务器.

     三个参数:

    

     1.客户端socket.

     2.接收方的socket参数.

     3.数据长度.

    

     返回值: 0 表示成功,其他: 错误代号.

     */

   

   

    // 1.服务器socket

    struct sockaddr_in serverAddress;

    // IPv4协议.

    serverAddress.sin_family = AF_INET;

    // 接收方(服务器)IP地址.

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

    // 端口号.

    serverAddress.sin_port = htons(56789);

   

   

    // 2.连接到服务器

 

    // serverAddress 的数据长度.

    socklen_t length = sizeof(serverAddress);

    // 连接服务器.

    // C语言中,传递结构体的时候,会指定结构体的长度

    // &取的是数据的起始位置,只有传递一个数据的长度,才能够保证拿到完整的结构体数据.

    // 返回值:0成功,其他都是失败.

    int connection = connect(socketNumber, (const struct sockaddr *)&serverAddress,length);

   

    if (!connection) {

        NSLog(@"连接成功%d",connection);

    }else{

        NSLog(@"连接失败");

    }

   

    /*

     发送消息到服务器

     参数:

     1> 客户端Socket.

     2> 发送内容地址.

     3> 发送内容长度.

     4> 发送方式标识,一般为0.

    

     */

   

    // 3.发送消息到服务器

   

    // 发送消息内容

    NSString *msg = @"hello socket!";

   

    msg.length :表示的是OC字符串的长度.

    msg.UTF8String :OC字符串转换成 UTF8 ASCII ,一个汉字需要占用3个字节的长度.

    strlen :计算所有 ASCII 码的长度.

   

    // 发送消息

    ssize_t result = send(socketNumber, msg.UTF8String, strlen(msg.UTF8String), 0);

   

    NSLog(@"result = %ld",result);

   

    /*

     接收服务器接返回的消息

     参数:

     1> 客户端Socket.

     2> 接收内容缓存区.

     3> 接收内容缓存区长度.

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

    

     返回值:

     如果成功,则返回接收到的字节数.失败则返回SOCKET_ERROR

    

     */

   

    // 4.服务器接收消息

   

    // 创建接收内容缓存区.

    uint8_t buffer[1024];

    // 接受消息

    ssize_t len = recv(socketNumber, buffer, sizeof(buffer), 0);

   

    NSLog(@"len: %zd",len);

    // 取出接受内容缓存区中的数据.

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

    // 将二进制流数据data转换成字符串类型.

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

    NSLog(@"receive:%@",receive);

   

    // 5.关闭Socket

    close(socketNumber);

时间: 2024-10-29 19:08:52

Socket简介(精通 Socket 养全家)的相关文章

Unix网络编程 之 socket简介

概述 Socket的英文原意是"孔"或"插座",现在,作为Unix的进程通信机制,常常取"插座"这一意义.日常生活中常见的插座,有的是信号插座,有的是电源插座,有的可以接收信号或能量,有的可以发送信号或能量.举例来说,电话线与电话机之间需要一个插座(相当于两者之间的接口,这一部分装置物理上是存在的).对于网络编程,socket就相当于电话线与电话机之间的插座. 将电话系统与面向连接的Socket机制相比,两者之间有着惊人的相似的地方.以一个国家的

iOS开发之socket简介

1,socket是什么? 2,socket的作用 3,socket怎么用 4,socket的扩展 —————————————————————— socket是什么? Socket这个名词现在有很多不同的意思,这里主要讲到其中2个含义.一是,套接字socket=(IP地址:端口号),是端的概念.二是,socket在应用层和传输层之间,是层的概念. 要理解socket是什么,首先要理解网络的分层结构,目前internet广泛使用的TCP/IP模型,总结起来网络模型分为四层,从上层往下依次为:应用层.

socket简介

目录(?)[-] 网络中进程之间如何通信 什么是Socket socket一词的起源 socket的基本操作 1socket函数 2bind函数 网络字节序与主机字节序 3listenconnect函数 4accept函数 5readwrite等函数 6close函数 socket中TCP的三次握手建立连接详解 socket中TCP的四次握手释放连接详解 一个例子实践一下 动动手 “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和

iOS进阶_Socket(Socket简介&amp;代码演练)

网络通讯三要素 TCP & UDP 三次握手 断开连接的四次握手 Socket套接字 了解了上面的概念,我们开始演练一下Socket #import "ViewController.h" #import <sys/socket.h> #import <netinet/in.h> #import <arpa/inet.h> @interface ViewController () @end @implementation ViewControl

golang socket与Linux socket比较分析

在posix标准推出后,socket在各大主流OS平台上都得到了很好的支持.而Golang是自带runtime的跨平台编程语言,Go中提供给开发者的socket API是建立在操作系统原生socket接口之上的.但golang 中的socket接口在行为特点与操作系统原生接口有一些不同.本文将对结合一个简单的hello/hi的网络聊天程序加以分析. 一.socket简介 首先进程之间可以进行通信的前提是进程可以被唯一标识,在本地通信时可以使用PID唯一标识,而在网络中这种方法不可行,我们可以通过

socket系列之socket服务端与客户端如何通信

上面已经分别介绍了ServerSocket跟Socket的工作步骤,并且从应用层往系统底层剖析其运作原理,我们清楚了他们各自的一块,现在我们将把他们结合起来,看看他们是如何通信的,并详细讨论一下他们之间相互通信的一些细节. 借助图2-3-2-4,想象一下你正在大学课室上着电脑,你跟你另外两个朋友觉得老师讲得课很菜,没必要听,于是你们仨都各自打开浏览器冲浪,刚好你们访问了同一台服务器,假如你用的是浏览器A,那么整个流程为: ① 浏览器确认目标IP跟目标端口号(http默认使用80端口),当然如果你

1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client

 1  Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连 接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,

Socket 初识 用Socket建立一个简易Web服务器

摘自<Asp.Net 本质论>作者:郝冠军 //在.Net中.system.Net命名空间提供了网络编程的大多数数据据类型以及常用操作,其中常用的类型如下:/*IPAddress 类表示一个IP地址* IPEndPoint类用来表示一个IP地址和一个端口号的组合,成为网络的端点.* System.Net.Sockets命名空间中提供了基于Socked编程的数据类型.* Socket类封装了Socked的操作.* 常见的操作:* Listen:设置基于连接通信的Socket进入监听状态,并设置等

python之socket实现unix socket及dash字符串操作

python的socket库可以实现tcp和udp,在linux下unix socket也是可以的,有些程序在进程间通信就是使用unix socket,如果我们想查看其通信的信息来进行调试,则可以用python来伪造其接口,获取内容 参考:https://docs.python.org/2/library/socket.html import socket import os  if __name__ == '__main__':          sock = socket.socket(so