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. 使用wex5得到的一些教训

    博主一直都是做web开发,前段时间有个小想法,想给自己做个android小应用(很小,功能特别简单). 了解到可以用js直接做,貌似很简单,选用了wex5(基于codova插件)来直接开发. 最终发现 ...

  2. Android中Activity的生命周期

    简介: 这个基本是必问的问题了,说一下你对Activity生命周期的理解,呵呵… onCreate, onStart, onResume, onPause, onStop, onDestroy, on ...

  3. keep the bar green to keep the code clean——Junit详解(二)

    测试用例&测试套件 举个栗子: 编写MyStack类模拟栈,并对其进行测试用例编写测试: 编写文件删除方法,并对其删除测试. 不再做演示,戳此获取代码 MyStack类: public cla ...

  4. 关于win10系统自带浏览器IE11的JQuery使用问题

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8&quo ...

  5. ruby 编译安装,gem国内源ruby.taobao.org

    centos6.6final 一.安装依赖包(使用默认CENTOS更新源): # yum install openssl* openssl-devel zlib-devel gcc gcc-c++ m ...

  6. 利用CSOM向列表添加文件夹

     博客地址:http://blog.csdn.net/FoxDave 本文只为记录一下这个小细节,不会过多赘述,开发可以看懂. 如果想向一个列表或库中添加文件夹,平时我们自然想到的是list.ro ...

  7. sql语句格式化数字(前面补0)、替换字符串

    以下是详细分析: 1.select power(10,3)得到1000(即:10的3次方) 2.select cast(1000+33 as varchar) 将1000转换类型(即:将int转化成v ...

  8. X3850M2安装CertOS 7 KVM 2--VNC

    需要安装远程桌面,否则无鼠标的日子比较难. VNC的安装需要步骤较多,重点参考以下文章: http://www.itzgeek.com/how-tos/linux/centos-how-tos/con ...

  9. maven的使用体验

    由于之前是从C++代码阵营中转到java阵营的(这里可能还会转到scala阵营中).在写工程代码的时候,如果是只是简单的创建java project的话,当然也是可以的.但是,随着项目慢慢扩大,组件越 ...

  10. TOMCAT运行一段时间后网页无响应或连不上,TOMCAT无错误日志

    解决方法:修改 tomcat 的 java options 参数1)增加java options参数-Xmn384m-XX:MaxPermSize=128m-XX:+UseConcMarkSweepG ...