(十一)socket、connect、bind函数详解
一、socket函数
1、头文件:
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
2、函数原型:
int socket(int domain, int type, int protocol);
socket函数类似于open,用来打开一个网络连接,如果成功则返回一个网络文件描述符(int类型),之后我们操作这个网络连接都通过这个网络文件描述符。
dimain:域,网络域,网络地址范围(IPV4或IPV6等),也就是协议簇
type:指定套接字类型:SOCK_STREAM(TCP网络)、SOCK_DGRAM(UDP)、SOCK_SEQPACKET
protocol:指定协议,如果指定0,表示使用默认的协议
3、函数形参:
3.1、domain:(域)
AF_INET ip
AF_INET6 ipv6
AF_PACKET packet 低级数据包接口
PF_PACKET 不懂,待了解
PF_INET 待了解(AF开头的表示地址族,PF开头的表示协议族,协议族包含多个地址族,但是当前这种还从未实现,而在<sys/socket.h>中PF的值总是与AF的值相等的)
3.2、type:(套接字类型):
SOCK_RAW 原始套接字 ——>使用原始套接字时候调用,原始套接字也就是链路层协议
SOCK_STREAM 字节流套接字 ——>提供顺序,可靠,双向,基于连接的字节流。 可以支持带外数据传输机制。例如:TCP协议、FTP协议
SOCK_DGRAM 数据报套接字 ——>支持数据报(无连接,不可靠的固定最大长度的消息)例如:UDP协议
SOCK_SEQPACKET 有序分组套接字 ——>为固定最大长度的数据报提供有序,可靠,双向连接的数据传输路径; 消费者需要利用每个输入系统调用读取整个分组
3.3、protocol(协议):
IPPROTO_IP IP传输协议
IPPROTO_TCP TCP传输协议
IPPROTO_UDP UDP协议
IPPROTO_SCTP SCTP传输协议
IPPROTO_ICMP ICMP协议
IPPROTO_IGMP IGMP协议
一般情况下IPPROTO_TCP、IPPROTO_UDP、IPPROTO_ICMP协议用的最多,UDP协议protocol就取IPPROTO_UDP,TCP协议protocol就取IPPROTO_TCP;一般情况下,我们让protocol等于0就可以,系统会给它默认的协议。但是要是使用raw socket协议,protocol就不能简单设为0,要与type参数匹配.
4、返回值:
成功时返回一个小的非负整数值,他与文件描述符类似,我们称为套接字描述符,简称sockfd。失败,则返回-1。
5、例子:
g_ulDevRawSock = socket( PF_PACKET, SOCK_RAW, htons(ETH_DEV) ); //#define ETH_DEV 0x8607
iFd = socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP);
fd = socket(PF_INET, SOCK_DGRAM, 0);
dnc_socket = socket(AF_INET, SOCK_STREAM, 0);
pupdate_info->update_socket = socket(PF_PACKET, SOCK_RAW, htons(0x8505)
二、connect函数
1、头文件:
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
2、函数原型:
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
TCP客户端通过connect函数与服务端连接,进行通信。
3、函数形参:
3.1、sockfd(客户端自己创建的sock)
3.2、addr(服务端地址族、服务端IP地址、服务端端口号)
3.3、addrlen(服务端地址字节长度)
4、返回值:
连接成功,返回0,连接失败,返回-1
5、例子:
seraddr.sin_family = AF_INET; // 设置地址族为IPv4
seraddr.sin_port = htons(SERPORT); // 设置地址的端口号信息
seraddr.sin_addr.s_addr = inet_addr(SERADDR); // 设置IP地址
ret = connect(sockfd, (const struct sockaddr *)&seraddr, sizeof(seraddr));
三、bind函数
1、头文件:
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
2、函数原型:
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
服务端套接字绑定自己的IP地址与端口号,客户端那边可以不写,内核会给它分配一个临时的端口。
3、函数形参:
3.1、sockfd:服务器或者客户端自己创建的socket
3.2、addr:服务器或者客户端自己的地址信息(协议族、IP、端口号)
3.3、addrlen:服务器或者客户端自己的地址信息的长度
4、返回值:
绑定成功,返回0,失败返回-1
5、例子:
seraddr.sin_family = AF_INET; // 设置地址族为IPv4
seraddr.sin_port = htons(SERPORT); // 设置地址的端口号信息
seraddr.sin_addr.s_addr = inet_addr(SERADDR); // 设置IP地址
ret = bind(sockfd, (const struct sockaddr *)&seraddr, sizeof(seraddr));
(十一)socket、connect、bind函数详解的更多相关文章
- c/c++ 标准库 bind 函数 详解
标准库 bind 函数 详解 bind函数:接收一个函数名作为参数,生成一个新的函数. auto newCallable = bind(callbale, arg_list); arg_list中的参 ...
- jQuery.bind() 函数详解
bind()函数用于为每个匹配元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需的数据. 执行bind()时,事件处理函数会绑定到每个匹配元素上.因此你使用bind( ...
- 《Javascript高级程序设计》读书笔记之bind函数详解
为什么需要bind var name = "The Window"; var object = { name: "My Object", getNameFunc ...
- bind函数详解(转)
var name = "The Window"; var object = { name: "My Object", getNameFunc: function ...
- windows socket函数详解
windows socket函数详解 近期一直用第三方库写网络编程,反倒是遗忘了网络编程最底层的知识.因而产生了整理Winsock函数库的想法.以下知识点均来源于MSDN,本人只做翻译工作.虽然很多前 ...
- c/c++ socket函数详解
c/c++ socket函数详解 注意: 使用socketAPI前,要先将相关链接库(Ws2_32.lib)加入链接,并使用WSAStartUp函数初始化.每个socket函数都可能失败(返回-1), ...
- 常用socket函数详解
常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...
- linux Socket send与recv函数详解
转自:http://www.cnblogs.com/blankqdb/archive/2012/08/30/2663859.html linux send与recv函数详解 1 #include ...
- linux select函数详解
linux select函数详解 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状 ...
随机推荐
- android 使用shape来优化界面效果
看下效果图: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=&quo ...
- java的基本数据类型有八种:
1)四种整数类型(byte.short.int.long): byte:8 位,用于表示最小数据单位,如文件中数据,-128~127 short:16 位,很少用,-32768 ~ 327 ...
- swift基础:第四部分:对函数和闭包的深入
()之前在什么公司,都自己做过哪些项目,从架构的角度来谈谈你的项目. () 你对iOS不同版本是怎么看的,你在做项目的过程当中,是如何应对版本问题的. () 你对iOS的性能是怎么优化的. () 你通 ...
- SpringMVC 温故而知新
http://www.cnblogs.com/bigdataZJ/p/5815467.html直接引用别人的吧,没时间呀
- [整理]Centos6.5 + hadoop2.6.4环境搭建
搭建Hadoop集群环境(3台机器) 1 准备环境 1.1 安装系统,并配置网络使3台机器互联互通,且SSH可直连(无需密码.保存私钥) 1.1.1 安装系统 安装Centos 6.5系统 安装过程略 ...
- Delphi Json
superobject.pas单元对json的解析非常方便, 力荐 下面演示对如下json的解析 { ", "memo": "S.H.E 004" } ...
- Spring学习笔记1——基础知识 (转)
1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书<Expert one-on-one J2EE Design and Deve ...
- CSS 样式优先级
首先,选择器优先级顺序 优先级逐级增加的选择器列表: 通用选择器(*) 元素(类型)选择器 类选择器 属性选择器 伪类 ID 选择器 内联样式 !important 规则例外,该样式声明会覆盖CSS中 ...
- MVC2,MVC3,MVC4和MVC5的不同
现在MVC的技术日趋成熟,面对着不同版本的MVC大家不免有所迷惑 -- 它们之间有什么不同呢?下面我把我搜集的信息汇总一下,以便大家能更好的认识不同版本MVC的功能,也便于自己查阅. View Eng ...
- 3.vi 和软件安装
vi编辑器全屏幕纯文本编辑器1.软件开发(程序编写) 2.配置文件修改以及系统服务调用模式 命令模式 插入模式 末行模式 a 追加 i 插入 o 打开(下一行) ESC shift+: ...