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( ...
随机推荐
- 如何查询centos查看系统内核版本,系统版本,32位还是64位
查看centos内核的版本: 1)[root@localhost ~]# cat /proc/version Linux version 2.6.18-194.el5 (mockbuild@build ...
- Sublime Text 使用 Emmet 补全错误问题
Sublime Text安装了Emmet后,使用Tab或者ctrl+e发现补全有问题,如: div.testClass#testId 变成了 div.<testClass id="te ...
- A-Frame_简单介绍
VR框架A-Frame: https://aframe.io 版本: 0.2.0 30/6/2016 A-Frame 是一个能够实现在web网页上实现3D和VR体验的开源框架,它是由 MozVR ...
- 有关c#装箱和拆箱知识整理
c#装箱和拆箱知识,装箱和拆箱是一个抽象的概念. 1.装箱和拆箱是一个抽象的概念 2.装箱是将值类型转换为引用类型 : 拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与O ...
- php获取客户端浏览器以及操作系统信息的方法
发布:sunday01 来源:net 阅读: 2 [大 中 小] 在较为智能的程序中,php可以获取客户端浏览器及操作系统信息,然后根据浏览器及系统类型,加载不同的页面,以提供更加个性化的 ...
- Eclipse插件推荐:UCDetector: Unnecessary Code Detector
正如其名,检查不必要的代码. 下载地址为:http://sourceforge.net/projects/ucdetector/files/latest/download?source=files 官 ...
- WebBrowser里网页根据文字判断来点击链接 无Name及ID时
uses ActiveX, ComObj, MSHTML; 根据连接文字点击连接- 一般情况下的连接 Procedure HTMLClinkByText(text:string;Wbr:TWebBro ...
- java android 中的Toast
package com.example.my1; import android.os.Bundle;import android.app.Activity;import android.content ...
- python中读取配置文件ConfigParser
在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简单的做一些介 ...
- ruby cookbook
11.2 listing object's method Oject.methods/singleton_methods/instance_methods 指定类名定义的方法在 singleton_m ...