socket 套接字
网络:交换机,路由器,网线
交换机:分配..
路由器:找寻网络线路
网络架构: 应用层 ---> 表示层 ---> 会话层 ---> 传输层 ---> 网络层 ---> 数据链路层 ----> 物理层
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 套接字的更多相关文章
- java 25 - 3 网络编程之 Socket套接字
		Socket Socket套接字: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. Socket原理机制: 通信的两端都有Socket. 网络通信其实就是Socket ... 
- 进程、线程、socket套接字-资源大小 & 切换代价
		另,进程 & 线程的很多知识可以看这里:http://www.cnblogs.com/charlesblc/p/6135666.html 今天查了一下进程和线程的资源占用. 比如问:栈和堆的大 ... 
- linux网络环境下socket套接字编程(UDP文件传输)
		今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ... 
- linux网络编程-(socket套接字编程UDP传输)
		今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ... 
- socket套接字TCP API
		socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点.或称之为句柄.IP地址+port号就能够唯一确定一个so ... 
- 进程间通信系列 之 socket套接字实例
		进程间通信系列 之 概述与对比 http://blog.csdn.net/younger_china/article/details/15808685 进程间通信系列 之 共享内存及其实例 ... 
- 进程间通信系列 之 socket套接字及其实例
		进程间通信系列 之 概述与对比 http://blog.csdn.net/younger_china/article/details/15808685 进程间通信系列 之 共享内存及其实例 ... 
- 一、网络编程-UDP传输协议及socket套接字使用
		知识点基本介绍:1.网络通信协议一般就是UDP和TCP俩种传输协议,这一章先说UDP,UDP是一种比较简单的传输协议,如qq使用的就是UDP 2.ip:ip就是标记网络中中的一台电脑 ... 
- 网络编程初识和socket套接字
		网络的产生 不同机器上的程序要通信,才产生了网络:凡是涉及到倆个程序之间通讯的都需要用到网络 软件开发架构 软件开发架构的类型:应用类.web类 应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌 ... 
- 传输模型, tcp socket套接字
		osi七层模型 tcp/ip四层模型 socket套接字 tcp 协议是可靠的 包括 三次握手 四次挥手 import socket # server server = socket.socket( ... 
随机推荐
- Mysql连接测试代码
			<?php $link=mysql_connect('localhost','root','htuidc'); if($link) echo "success"; ?> 
- sql批量修改插入数据
			1.批量修改 select 'update 读者库 set 单位代码='''+新单位代码+''' where 单位代码='''+单位代码+'''' from 读者单位 ,)<'L' and is ... 
- [译]MongoDb生产环境注意事项
			译注: 本文是翻译MongoDB Manuel中的MongoDB Production Notes一节内容.这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,值得正在部署MongoDB的工作者 ... 
- Cassandra 备份 - 1 - 节点镜像恢复
			之前比较关注如何使用Cassandra,但是真正想大规模使用前提还是需要搞清楚备份机制,确保数据安全. 本文主要内容来自文档 "Cassandra2.2"的翻译.最后部分为真实操作 ... 
- c语言学习的第四天2
			上图显示了float和double的精度,精度:就是指数值的精确程度,浮点类型可表示的数值范围很大,但只有几位是精确的,可以通过小 数所占的位数来获取,float小数部分最多能有7位有效数字,但绝对能 ... 
- 基于jQuery打造的选项卡向上弹出jquery焦点图切换特效
			基于jQuery打造的选项卡向上弹出jquery焦点图切换特效 鼠标经过标题栏,会出现层特效向上滑动,并且在同时进行幻灯片切换,效果十分不错. 有兴趣的童鞋可以下载看看,在IE6方面兼容性也不错,只有 ... 
- VMware虚拟机升级过程中遇到的一点问题
			在将VWware由9.0升级到10.0的过程中,出现如下图的错误: failed to create the requested registry key Key:Installer e ... 
- andoroid项目使用Javah找不到class问题
			比如目录结构是:Soffice\bin\classes\cn\com\isoffice\util\SofficeWebService.class 进入到bin/classes 下使用命令 javah ... 
- BufferedInputSream和BufferedOutputSream,,,
			package cd.itcast.bufferinputstream; import java.io.BufferedInputStream; import java.io.File; import ... 
- 华为C语言编程规范
			DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ... 
