网络:交换机,路由器,网线

交换机:分配..

路由器:找寻网络线路

网络架构: 应用层 ---> 表示层 ---> 会话层 ---> 传输层 ---> 网络层 ---> 数据链路层 ----> 物理层

TCP/IP 商用: 应用层 ---> 传输层 ---> 网络层 ---> 物理+数据链路

socket 在传输层和应用层之间

TCP/IP 传输流程:

  

一次连接三次握手:客服端访问服务器端,服务器端响应,服务器访问客户端,客户端响应

套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

//服务器端

#import "AppDelegate.h"
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>

@interface AppDelegate (){
    
    //服务器标志
    
    int server_flag;
    
    //客户端标志
    
    int client_flag;
    
    //地址
    struct sockaddr_in addr;
    
}

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    // 错误
    int error = -1;
    
#pragma mark --- 服务器端设置 ---
    
    //创建服务器端 (IP类型,通信协议, )
    server_flag = socket(AF_INET, SOCK_STREAM, 0);
    
    //将服务器绑定到一个具体的计算机
    //端口
    addr.sin_port = htons(9006);
    //计算机
    addr.sin_addr.s_addr = INADDR_ANY;
    //IPV4
    addr.sin_family = AF_INET;
    
    //server_flag 绑定
    
    error = bind(server_flag, (struct sockaddr*)&addr, sizeof(addr));
    
    //最大连接数
    error = listen(server_flag, 100);
    
    printf("服务器启动成功!\n");
    
    //等待
    
    while (YES) {
        //等待接收
        client_flag = accept(server_flag, NULL, NULL);
        
        
        //保存接收数据
        //字符数组
        char buff[1024] = {0};
        
        //接收数据长度
        long length = 0;
        
        length = recv(client_flag, buff, 1024, 0);
        
        buff[length] = '\0';
        printf("client asy : %s \n",buff);
        
        //发送数据
        send(client_flag, "hello world", 80, 0);
        
        close(server_flag);
        
    }
    
    
    return YES;
}

//客户端

#import "AppDelegate.h"
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>

@interface AppDelegate ()
{
    int client_flag ;
    
    struct sockaddr_in server;

}

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    
    int error = -1;
    
    client_flag = socket(AF_INET, SOCK_STREAM, 0);
    
    server.sin_family = AF_INET;
    server.sin_port = htons(9006);
    server.sin_addr.s_addr = inet_addr("172.18.16.158");
    
    error = connect(client_flag, (struct sockaddr*)&server, sizeof(server));
    send(client_flag, "鲁二蛋", 1024, 0);
    
    char buff[1024] = {0};
    
    long length = 0;
    
    
    
    length = recv(client_flag, buff, 1024, 0);
    
    buff[length] = '\0';
    printf("server say : %s\n",buff);
    
//    close(client_flag);
    
    return YES;
}

socket 套接字的更多相关文章

  1. java 25 - 3 网络编程之 Socket套接字

    Socket Socket套接字: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. Socket原理机制: 通信的两端都有Socket. 网络通信其实就是Socket ...

  2. 进程、线程、socket套接字-资源大小 & 切换代价

    另,进程 & 线程的很多知识可以看这里:http://www.cnblogs.com/charlesblc/p/6135666.html 今天查了一下进程和线程的资源占用. 比如问:栈和堆的大 ...

  3. linux网络环境下socket套接字编程(UDP文件传输)

    今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...

  4. linux网络编程-(socket套接字编程UDP传输)

    今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...

  5. socket套接字TCP API

    socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点.或称之为句柄.IP地址+port号就能够唯一确定一个so ...

  6. 进程间通信系列 之 socket套接字实例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  7. 进程间通信系列 之 socket套接字及其实例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  8. 一、网络编程-UDP传输协议及socket套接字使用

    知识点基本介绍:1.网络通信协议一般就是UDP和TCP俩种传输协议,这一章先说UDP,UDP是一种比较简单的传输协议,如qq使用的就是UDP          2.ip:ip就是标记网络中中的一台电脑 ...

  9. 网络编程初识和socket套接字

    网络的产生 不同机器上的程序要通信,才产生了网络:凡是涉及到倆个程序之间通讯的都需要用到网络 软件开发架构 软件开发架构的类型:应用类.web类 应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌 ...

  10. 传输模型, tcp socket套接字

    osi七层模型 tcp/ip四层模型 socket套接字 tcp 协议是可靠的  包括 三次握手 四次挥手 import socket # server server = socket.socket( ...

随机推荐

  1. 华为OJ-合唱队

    华为OJ-初级题-合唱队 思路与分析 本题可以用DP的方法,分别从正向和逆向的两个方向求,该数组即186 186 150 200 160 130 197 200的上升对大序列.正向为[1, 1, 1, ...

  2. Vue.js学习 Item5 -- 计算属性computed与$watch

    在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么 Vue.js 将绑定表达式限制为一个表达式.如果需 ...

  3. PHP截取字符串 兼容utf-8 gb2312

    <?php function subString($string,$length,$append = false) { if(strlen($string) <= $length ) { ...

  4. 生成不重复随机数,int转 TCHAR 打印输出

    在0~n 中 随机去除不重复的k个数 int k=100; int n=80000; for(int i=0;k>0&&i<n;i++) { if((bigrand()%( ...

  5. SVG矢量图--爱心

    aixin.xml: <!-- height:width=viewportHeight:viewportWidth --> <vector xmlns:android="h ...

  6. delphi的几个特别关键字 object absolute

    1.object关键字相当于C++中的struct, record定义个结构体只能定义数据,而object可以定义方法,默认都是public的.   代码示例如下: TTest = record na ...

  7. Delphi7中编译提示“Unsafe type 'PChar'”的原因及处理办法

    delphi7中加入了对.net的支持 在.net中是没有指针的(托管环境中),所以指针都是不安全的,不符合.net规范 所以d7里有警告,可以不管它 DELPHI7已经考虑到了移植到点NET的问题, ...

  8. 重定向语句Response.Redirect()方法与Response.RedirectPermanent()对搜索引擎页面排名的影响

    在ASP.NET中,开发人员经常使用Response.Redirect()方法,用编程的手法,将对老的URL的请求转到新的URL上.但许多开发人员没有意识到的是,Response.Redirect() ...

  9. Linq的一些记录

    1. IQueryable接口与IEnumberable接口的区别:  IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了, ...

  10. lnmp的使用

    命令 1.状态管理 lnmp {start|stop|reload|restart|kill|status} 2.添加虚拟host lnmp vhost add