Socket的基本使用步骤
Socket的基本使用步骤
一.使用Socket,首先需要导入这几个系统头文件
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
二.然后就是进行Socket代码的编写,先来看看实现一个简单的Socket通信需要哪些步骤:
>1.创建客户端Socket;
>2.创建服务器Socket;
>3.连接两个Socket;
>4.客户端Socket发送信息给服务器(发送请求的过程);
>5.服务器响应客户端的请求,返回给客户端数据(服务器响应的过程);
>6.客户端接受服务器返回的数据;
>7.关闭Socket;
三.下面要进行详细的Socket代码实现了.
1.创建客户端Socket
//参数1:协议域: 遵守的IP协议类型! AF_INET:IPv4 AF_INET6:IPv6
//参数2:端口类型: TCP:SOCK_STREAM UDP:SOCK_DGRAM
// 参数3: 选择的协议类型! 一般传0 会根据第二个参数自动选择协议类型!
// 返回值: 如果返回值>0 ,标示 Socket 创建成功!
int SocketNumber = socket(AF_INET,SOCK_STRESM,0);
2. 创建服务器端 Socket
struct sockaddr_in serverAddress;
// 主机 /端口
// 设置 服务器Socket 遵循的 IP 协议类型为 IPv4
serverAddress.sin_family = AF_INET;
// 服务器 Socket 的 IP 地址
serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1");
// 设置服务器Socket 的端口号;
// 端口号的最大值 65535; 09~1024 是系统默认占用的端口号!不要设置!
// 如果需要手动设置端口号: 一般设置 1024 ~ 65535 之间的值!
serverAddress.sin_port = htons(3456);
3. 连接两个 Socket
// 参数1: 客户端的 Socket
// 参数2: 服务器端 Socket/结构体 (const struct sockaddr *)&serverAddress 强制类型转换
// 参数3: 第二个参数的长度! sizeof(serverAddress) 计算长度! 计算的是内存地址的长度!
// 返回值: 如果返回值为0 代表连接成功!
// 返回值 != 0 ,代表连接失败!
// 如果想要连接成功,必须实时监测服务器端的端口!
// 监测服务器端口: nc -lk 12345
int conn = connect(SocketNumber, (const struct sockaddr *)&serverAddress, sizeof(serverAddress));
4. 发送信息给服务器
// 参数1: 客户端 Socket
// 参数2: void * 传递给服务器的数据! msg.UTF8String 就是直接将 OC 数据转换成 C 语言的数据类型!
// 参数3: size_t 锁传递给服务器数据的长度!
// 参数4: 传0 等待服务器响应数据!
NSString *msg = @"hello socket";
send(SocketNumber, msg.UTF8String, strlen(msg.UTF8String), 0);
5.接受服务器返回的数据!
// 参数1:客户端 Socket :服务器确定返回给哪一个客户端数据.
// 参数2:void * :接收服务器返回数据的地址(区域)
// 参数3:size_t :接受地址的长度
// 参数4:传0 等待服务器返回数据!
// 返回值: 就是服务器返回的数据长度!
ssize_t buffer[1024];
ssize_t length = recv(SocketNumber, buffer,sizeof(buffer), 0);
// 获得服务器返回的数据(从 buffer 中取出需要的数据)
// 根据二进制数据,拼接字符串
// Bytes: 网络中传递的数据流(比特流/字节)
NSString *returnMsg = [[NSString alloc] initWithBytes:buffer length:length encoding:NSUTF8StringEncoding];
6.一个请求结束之后(接收到响应之后),需要手动关闭Socket!
close(SocketNumber);
Socket的基本使用步骤的更多相关文章
- python socket 编程之一:编写socket的基本步骤
一.socket 编写server的步骤: 1.第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family ...
- TCP/IP、Http、Socket、XMPP-从入门到深入
TCP/IP.Http.Socket.XMPP-从入门到深入 终极iOS程序猿 2016-12-29 18:27 为了便于大家理解和记忆,我们先对这几个概念进行的介绍,然后分析他们的不同,再进行详细的 ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- tomcat通过socket连接MySQL,不再占用服务端口【linux】
MySQL连接方式的说明 http://icbm.iteye.com/blog/1840673 MySQL除了最常见的TCP连接方式外,还提供SOCKET(LINUX默认连接方式).PIPE和SHAR ...
- 使用 Socket 通信实现 FTP 客户端程序(来自IBM)
FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...
- iOS的TCP/IP协议族剖析&&Socket
原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有S ...
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
- Flex通信-与Java实现Socket通信实例
Flex通信-与Java实现Socket通信实例 转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...
- C# Socket编程笔记(转)
C# Socket编程笔记 http://www.cnblogs.com/stg609/archive/2008/11/15/1333889.html TCP Socket:Server 端连接步骤: ...
随机推荐
- Codeforces Round #335 (Div. 2) A
A. Magic Spheres time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- IIS Express被局域网访问
在 文件夹 C:\Users\administrator\Documents\IISExpress\config 下面 applicationhost.config 文件里 找到相应的项目 如 < ...
- WPF Canvas转换为位图 (RenderTargetBitmap)
使用 RenderTargetBitmap 的注意事项: 1. 要渲染的Canvas元素要放在Border元素内,并且此Border元素不能设置边框宽度(BorderThickness),不然生成的位 ...
- Ubuntu14上安装Mongo3.2
1. 安装 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D68FA50FEA312927 echo "deb ...
- 并行执行hive脚本
### 模板脚本存放路径(无需修改) cd /tmp/fix_data/tmp_wjj_20180322_01 ### 脚本名称 script=tmp_wjj_20180322_01 ### 开始日期 ...
- centos7安装与卸载软件
安装 yum install 服务名 查看服务名 rpm -qa |grep -i aerospike 或者 yum list installed | grep aerospike 卸载 yum re ...
- Hive 变量和属性
Hive 中变量和属性命名空间 下面我们来用几个例子操作下: &hive SLF4J: Class path contains multiple SLF4J bindings.SLF4J: F ...
- java多线程(二)
线程的阻塞状态: 参考java多线程(一)多线程的生命周期图解,多线程的五种状态. 1.1 join(),如果在A线程体里面执行了B线程的join()方法,那么A线程阻塞,直到B线程生命周期结 ...
- 工作采坑札记:2. Hadoop中MultipleInputs的使用陷阱
1. 背景 近日在一个Hadoop项目中使用MultipleInputs增加多输入文件时,发现相同路径仅会加载一次,导致后续的统计任务严重失真.本博文旨在记录异常的排查及解决方案. 2. 情景重现 ( ...
- Quartz使用(3) - Quartz核心接口Trigger
Trigger最常用的有两种SimpleTrigger和CronTrigger,首先介绍Trigger的一些基础的信息,然后会详细描述这两种Trigger. 1. 通用Trigger属性 quartz ...