1. struct protoent *protocol=getprotobyname(char *p);

功能:通过协议名获取协议类型信息

解释:p为字符串指针,指向一个协议名,如icmp,struct protoent及函数在<netdb.h>中定义,protocol->p_proto为协议类型值。

2.send():send()函数执行成功意味着用户自定义缓冲区中的数据成功的复制到了套接字发送缓冲区,但不能保证数据已经发送出去。

3.read():当套接字为非阻塞方式时,用read()读取,若缓冲区中没有数据则read()返回小于0的数;

4.fcntl:可通过fcntl(sockfd,F_SETFL,O_NONBLOCK)将套接字设置为非阻塞方式;

5.计时函数:gettimeofdany(struct timeval *time,NULL)

struct timeval

{
   long int tv_sec;

   long int tv_usec;

};

6.inet_pton(AF_INET,*p_ip,*n_ip),inet_ntop(AF_INET,*n_ip,*p_ip,int len)

7.connect()函数对套接字和协议字段的影响:

(1)使用connect(sockfd,(struct sockaddr *)p,len)之后,sockfd仅接受p地址发过来的数据,注意原始套接字可以连接指定ip,但无法连接指定端口

(2)发送数据时不再指定地址,目的地址默认为p;

(3)告诉内核目的地址的相关信息,内核据此来填充各层协议首部中与目的地址相关的字段。

8.bind()函数对套接字的影响:

(1)调用bind(sockfd,(struct sockaddr *)p,len)后,sockfd仅接受目的地址为p的数据,原始套接字可bind()ip,不能bind()端口。

(2)告诉内核源地址的相关信息,内核据此来填充各层协议首部中与源地址相关的字段。

(3)指定了发送时所选的ip,自己绑定非通配ip时一定要选择一个合适的网络接口

TCP客户端套接字的connect()与bind()使用情况:

客户端程序通常不调用bind(),当调用connect()时,内核会为套接字绑定一个源地址rsc_IP与端口号con_port,

接收:该套接字仅接受目的ip为rsc_ip,目的端口号为con_port的数据

TCP服务器端套接字connect()与bind()的使用情况:

服务器端程序通常调用bind(),绑定端口port_number,但不绑定ip,将ip置为INADDR_ANY。

接收:套接字可接收发向本机的任何网口的数据(目的端口为port_number)

发送:把客户端发送的SYN包的目的地址当做源地址。

UDP客户端套接字的connect()与bind()使用情况:

客户端程序通常不调用bind(),当调用发送函数时,内核会为套接字绑定一个源地址rsc_IP与端口号con_port,

接收:该套接字仅接受目的ip为rsc_ip,目的端口号为con_port的数据

TCP服务器端套接字connect()与bind()的使用情况:

服务器端程序通常调用bind(),绑定端口port_number,但不绑定ip,将ip置为INADDR_ANY。

接收:套接字可接收发向本机的任何网口的数据(目的端口为port_number)

发送:把客户端发送的数据包的目的地址当做源地址。

connect()函数的返回值的意义:成功返回0,不成功返回-1,不成功时,跟据error值判断错误类型。

加入头文件<string.h>,字符串长度计算函数:strlen(*p),p为字符串指针,可以为指针,也可以是数组名

int sendto ( socket s , const void * msg, int len, unsigned int flags, const
struct sockaddr * to , int tolen ) ;
返回值:成功时返回实际发送的字节数,失败时返回-1;
 
int recv(sockfd,buff,size,flag)
flag为接收数据方式选项,成功返回实际收到的数据长度,失败返回-1;
 
int recvfrom(sockfd,buff,size,flag,sockaddr,len)
sockaddr是一个空的套接字地址结构,收到数据时,会将数据的源地址存入其中。
 
 
int ioctl()函数获取的mac地址,ip地址是网络字节序的,不用再进行大小端转化,获取网口信息之前需要指定网口名,通过网口序号获取网口名,2号网口是“eth0”。
 
 

linux c网络编程之函数的更多相关文章

  1. 嵌入式linux的网络编程(1)--TCP/IP协议概述

    嵌入式linux的网络编程(1)--TCP/IP协议概述 1.OSI参考模型及TCP/IP参考模型 通信协议用于协调不同网络设备之间的信息交换,它们建立了设备之间互相识别的信息机制.大家一定都听说过著 ...

  2. Linux C网络编程学习笔记

    Linux C网络编程总结报告 一.Linux C 网络编程知识介绍: 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端:(client) 在网络程序中, ...

  3. Linux C++ 网络编程学习系列(1)——端口复用实现

    Linux C++ 网络编程学习系列(1)--端口复用实现 源码地址:https://github.com/whuwzp/linuxc/tree/master/portreuse 源码说明: serv ...

  4. c/c++ 网络编程 getaddrinfo 函数

    网络编程 getaddrinfo 函数 解析网址,返回IP地址. 例子: #include <iostream> #include <string.h> #include &l ...

  5. c/c++ 网络编程 bind函数

    网络编程 bind函数 bind的作用是确定端口号. 正常处理都是先bind,然后listen 如果不bind,直接listen,会是什么结果? 内核会自动随机分配一个端口号 例子: #include ...

  6. Linux网络编程-readn函数、writen函数、readline函数实现

    readn函数功能:在网络编程的读取数据中,通常会需要用到一个读指定字节才返回的函数,linux系统调用中没有给出,需要自己封装. readn实现代码: int readn(int fd, void ...

  7. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  8. 【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)

    RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [ ...

  9. 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)

    RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三  多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...

随机推荐

  1. 根据序列图像聚焦区域获取深度 Shape From Focus

    最为超新新新新鸟...我也不知道第一篇文章应该写什么..所以,把自己最近正在研究的东西报一下吧, 研究的东西其实也不算深奥,就是对一个图像序列中的每张图像进行检测,发现每张图片的聚焦清晰区域,找到这个 ...

  2. Emoji表情符号录入MySQL数据库失败解决

    让MySQL支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节, ...

  3. C# 数据类型

    1.整数类型:  int    只能 存储证书,不能存储小数. 2.小数类型: doubie 机能存储整数,也能存储小数,小数点后面的额 15-16位. 3.金钱类型: decimal:用来存储金钱, ...

  4. C++数据类型和变量类型。

    数据类型 数字是自由的[不只属于某个类型]!但是它可以有不同的身份!int.char.float.double等身份.它以不同的身份[存储规则]存储在内存的某个位置内部! 变量类型 内存编号是不会变的 ...

  5. 又出头了,又SB了

    前些天买冰箱的事啊.. 前些天卡激活的事啊.. 今天门禁的事情啊.. 自己真是大傻逼啊.. 自己表情非常难看.注意保持乐观帅气的笑容.

  6. cookie怎么用

    cookie是什么? cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是JavaScript本 ...

  7. 招聘信息:无线产品研发总监 60-100W

    招聘信息:某知名电商公司诚招: 无线产品研发总监 60-100W 招聘人数:1名 岗位描述: 熟悉互联网产品业务流程,完成产品功能的概念设计个原型展示: 进行市场调查和分析,相关用户研究和信息整理,提 ...

  8. 微信支付curl出错及错误码解决方案

    1. curl错误码6 出现场景 PHP Fatal error: Uncaught exception 'WxPayException' with message 'curl出错,错误码:6' in ...

  9. UE4 中在 Actor 中动态 Create Component 与ChildActor 的 小笔记

    Note:旧版本的UE4 的Attach 和12.13版本有些不一样 创建Component: UCpp_MyComponent* temp_imageCom = NewObject<UCpp_ ...

  10. myeclipse2014 svn插件添加

    http://blog.csdn.net/sushengmiyan/article/details/38342411