一、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函数详解的更多相关文章

  1. c/c++ 标准库 bind 函数 详解

    标准库 bind 函数 详解 bind函数:接收一个函数名作为参数,生成一个新的函数. auto newCallable = bind(callbale, arg_list); arg_list中的参 ...

  2. jQuery.bind() 函数详解

    bind()函数用于为每个匹配元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需的数据. 执行bind()时,事件处理函数会绑定到每个匹配元素上.因此你使用bind( ...

  3. 《Javascript高级程序设计》读书笔记之bind函数详解

    为什么需要bind var name = "The Window"; var object = { name: "My Object", getNameFunc ...

  4. bind函数详解(转)

    var name = "The Window"; var object = { name: "My Object", getNameFunc: function ...

  5. windows socket函数详解

    windows socket函数详解 近期一直用第三方库写网络编程,反倒是遗忘了网络编程最底层的知识.因而产生了整理Winsock函数库的想法.以下知识点均来源于MSDN,本人只做翻译工作.虽然很多前 ...

  6. c/c++ socket函数详解

    c/c++ socket函数详解 注意: 使用socketAPI前,要先将相关链接库(Ws2_32.lib)加入链接,并使用WSAStartUp函数初始化.每个socket函数都可能失败(返回-1), ...

  7. 常用socket函数详解

    常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...

  8. linux Socket send与recv函数详解

    转自:http://www.cnblogs.com/blankqdb/archive/2012/08/30/2663859.html linux send与recv函数详解   1 #include ...

  9. linux select函数详解

    linux select函数详解 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状 ...

随机推荐

  1. MongoDB win安装后无法远程连接访问

    mongoDB安装后无法远程连接访问,原因是端口没有开放允许连接的权限 开启允许连接的权限: 管理工具-高级win防火墙

  2. HTML5Canvas标签(https://developer.mozilla.org)

  3. 谁也无法挡住我访问Google---使用Nginx反向代理攻略

    展示最终成果: 浏览器打开​ http://www.manda13.com/(慢搭搜索)这个是自己搭建的百度网盘搜索,欢迎测试 点击右上角“原版Google”,就可以访问Google. 是不是很方便. ...

  4. Notepad++自动刷新文本

    现在的日志信息往往都是打印在硬盘上,而不是保存到线上,所以我们常常会使用notepad++来查看硬盘上的文本文件 这时往往会出现两个问题 (1)在notepad++长时间最小化后,再次打开会提示是否下 ...

  5. 阿里云推荐码 hut29f

    阿里云 推荐码 hut29f,适用于新手首次购买.

  6. mac 10.11 cocopods注意的地方

    最近安装cocoapods,遇到些新问题,安装过程纠结了一天,先是ruby版本的问题,解决掉了,后来又是ruby下载cocoapods慢的问题,尝试了好几遍都下载不成功.最后也是不断尝试和查询,算是安 ...

  7. eclispe或者myeclispe maven jar包不能部署到tomcat下

    我们在做web开发是,经常都要在eclipse或者myeclipse中搭建web服务器,并将开发中的web项目部署到web服务器进行调试,在此,我选择的是tomcat服务器.之前部署web项目到tom ...

  8. oracle性能优化之表设计

    数据库优化的目标无非是避免磁盘I/O瓶颈.减少CPU利用率和减少资源竞争.为了便于读者阅读和理解,笔者参阅了Sybase.Informix和Oracle等大型数据库系统参考资料,基于多年的工程实践经验 ...

  9. lua 基础 1

    --1.1 Chunks--[[Chunk 是一系列语句,Lua 执行的每一块语句,比如一个文件或者交互模式下的每一行都是一个 Chunk.]] -- 1.2 全局变量--[[ 全局变量不需要声明,给 ...

  10. SSH框架整合项目(一)——搭建平台和引入依赖

    前言:这个项目是我的第一个实验性项目,最初的立意是制作一个个性化的BBS.由于BBS能够综合大部分功能,因此作为练手的项目来说再好不过.从写第一行代码到完成测试版大概历时2周.中间遇到了不少以前在学习 ...