一、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. Oracle 多行变一列的方法

    多行变一列的方法有很多,觉得这个第一眼看懂了当时就用的这个办法. 情况是这样的.以下数据前几列是一样的,需要把VAT_VALUE_CHAR 的值放在同一行上. SELECT * FROM ps_vat ...

  2. mui小总结

    下拉刷新 第一: mui.init({ pullRefresh: { container: '#pullrefresh', up: { contentrefresh: '正在加载...', callb ...

  3. python for MSSQLserver

    # -*- coding: utf-8 -*- '''python coded by written in 2016/8/31 Used for get win os log for each win ...

  4. Ideas about the future of management

    1. Business markets a. greater competition among companies b. increase in power of global companies ...

  5. spring boot servlet 注入

    spring boot 注入servlet的方法是借助ServletRegistrationBean这个类 例子如下: 先建一个servlet import java.io.IOException; ...

  6. angularJS——ng-bind指令与插值的区别

    在AngularJS中显示模型中的数据有两种方式: 一种是使用花括号插值的方式: <p>{{text}}</p> 另一种是使用基于属性的指令,叫做ng-bind: <p ...

  7. Linux下面配置文件~/.bash_profile

    ~/.的意义是什么? ~ 代表你的/home/用户名目录 假设你的用户名是x,那么~/就是/home/x/ . 是代表此目录本身,但是一般可以不写 所以cd ~/. 和cd ~ 和cd ~/效果是一样 ...

  8. 搜索引擎LuceneNet

    http://www.cnblogs.com/edisonchou/p/5348625.html

  9. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...

  10. gulp编译sass

    前言:前段时间学习了sass语法,但是一直用的是"考拉"这个软件工具将我写的sass代码编译成css,然后再引用到项目里面去的,随着对sass的更加深入的了解,我开始尝试着将sas ...