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

交换机:分配..

路由器:找寻网络线路

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

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. Eclipse HibernateTools安装

    Hibernate Orm是个很强大的东东,可以将数据表映射成实体,EClipse安装了HibernateTools插件后可以生成pojo,配置xml等一系列自动化工作,为我们的开发减轻了很多. 下面 ...

  2. SQL中如何检查死锁

    SQL中如何检查死锁 编写人:CC阿爸 2014-6-15 在日常SQL数据库的操作中,SQL偶尔会出现表被死锁的问题.比如: 在执行事务时,突然中止事务.系统肯定会锁表. 大批量数据操作时,由于网络 ...

  3. PHP 实现下载文件到本地

    只需要在php文件中设置请求头就可以了,创建download.php文件,代码如下: $fileName = $_GET['filename']; //得到文件名 header( "Cont ...

  4. laravel5.2 学习之服务提供者

    契约接口:app\Contracts\LanguageContract.php <?php namespace App\Contracts; interface LanguageContract ...

  5. 小鸟哥哥博客 For SAE

    独立博客地址:http://www.zhujiawei.com.cn/ 辞职后出去玩了几个月,把积蓄都快花光了,打算熬到年底再找工作.最近闲来无聊,想起自己一年前趁着活动便宜,一口气买了10年的域名一 ...

  6. mouseout以及mouseover

    两个图层 红色图层代表outside蓝色图层代表inside dom结构如下 <div id="outside">      <div id="insi ...

  7. openSUSE13.2安装ruby和rails

    用rvm安装了ruby2.2.0之后,发现rails又装不了了,因为什么nokgiri安不上需要安装两个包: libxml2 libxml2-dev libxslt libxslt-dev 然后gem ...

  8. 如何在Eclipse中配置Tomcat

    1.Eclipse EE 配置Tomcat Eclipse EE 主要用于Java Web开发和J2EE项目开发.Eclipse EE中配置Tomcat比较简单,新建一个Tomcat Server即可 ...

  9. linux C socket

    socket套接字和管道同样可以提供进程内通信.但套接字更胜一筹,不同的进程可以跨越不同的主机(说白了,支持网络通信).使用套接字的知名程序:telnet.rlogin.ftp等. 你需要知道的一些基 ...

  10. Java入门到精通——基础篇之static关键字

    一.概述        static 关键字是声明静态变量,静态方法用的.static的含义是属于类且不属于类对象的变量和函数. 二.static的产生.         在创建对象的时候除非用new ...