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

交换机:分配..

路由器:找寻网络线路

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

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. Ubuntu系统使用记录(持续更新)

    本篇文章记录在虚拟机上跑Ubuntu16.04遇到的一系列问题,熟悉一下Ubuntu的相关操作,进入终端的方法ctrl+alt+t. 1.修改屏幕分辨率,进入系统默认的是800x600 即便能够进入s ...

  2. css3选择器 以及当天知道的东西

    10.25日伪类:a:link{}未访问的链接      a:visited{}已访问的链接     a:hover{}鼠标移动到链接上      a:active{}选定的链接  注:a:hover ...

  3. Vue.js常见问题

    1.Vuejs组件 vuejs构建组件使用 Vue.component('componentName',{ /*component*/ }): 这里注意一点,组件要先注册再使用,也就是说: Vue.c ...

  4. jquery 基础汇总---导图篇

    最近在慕课网学习了一些jquery的基础知识,为了方便记忆,整理出来的导图 jQuery基础总共分为4个部分,分别是样式篇.事件篇.动画篇.DOM篇. 样式篇,主要介绍jQuery的基础语法,选择器以 ...

  5. ThinkPHP之中getlist方法实现数据搜索功能

    自己在ThinkPHP之中的model之中书写getlist方法,其实所谓的搜索功能无非就是数据库查询之中用到的like  %string%,或者其他的 字段名=特定值,这些sql语句拼接在and语句 ...

  6. ASP.NET MVC5学习笔记之Action参数模型绑定之模型元数据和元数据提供

    一. 元数据描述类型ModelMetadata 模型元数据是对Model的描述信息,在ASP.NET MVC框架中有非常重要的作用,在模型绑定,模型验证,模型呈现等许多地方都有它的身影.描述Model ...

  7. delphi控件安装与删除

    附带通用控件安装方法:----------基本安装1.对于单个控件,Componet-->install component..-->PAS或DCU文件-->install;2.对于 ...

  8. 北京汽车官网经销商信息抓取(解析html标签)

    1.网站地址http://www.baicmotor.com/dealer.php 2.使用firefox查看后发现,此网站的信息未使用json数据,而是简单那的html页面而已 3.使用pyquer ...

  9. Kindeditor小改动

    1.Flash上传时默认的大小为550*400,修改Kindeditor/plugins/flash/flash.js里的 self.plugin.flash内容,根据自己的页面直接设置默认大小,方便 ...

  10. MongoDB分片简单实例

    分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据也足以提供可接受的读写吞吐量.这时,我 ...