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. CF #296 (Div. 1) B. Clique Problem 贪心(构造)

    B. Clique Problem time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  2. lucene中Field.Index,Field.Store详解

    lucene在doc.add(new Field("content",curArt.getContent(),Field.Store.NO,Field.Index.TOKENIZE ...

  3. JSP基础语法

    JSP页面元素构成: 指令: page指令: ISO-8859-1 是纯英文的字符集,UTF-8 是中文字符集,将pageEncoding =ISO-8859-1 改为 contentType=utf ...

  4. 最简单的RASPBERRY PI wifi配置

    Setting up Wifi with the Command Line  SIMON MONK   This tutorial works best if your router is broad ...

  5. C++多线程2

    #include "stdafx.h" #include <windows.h> int g_count; ; DWORD __stdcall Func(LPVOID ...

  6. asp.net文件下载文件另存为

    这是一个困惑已久的问题…… 首先,用<a>标签的href打开浏览器能解读的文件(如txt,jpg,pdf等),会自动打开,无法做到弹出另存为的效果. 其次,网上搜索了各种JS解决办法,包括 ...

  7. Ubuntu下freeradius-server的安装

    一.安装 (1)更新 #apt-get update (2)下载 链接:ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.9. ...

  8. javascript页面加载完执行事件

    <script type="text/javascript" language="JavaScript"> //: 判断网页是否加载完成 docum ...

  9. 利用calc计算宽度

    width:calc(100% - 40px)可用 + - * / 进行计算(ie9+) 注:计算符号前后必须跟上空格.

  10. web 页面上纯js实现按钮倒计数功能

    需求构思:本功能想实现的是,一个按钮在页面载入就显示提醒续费,,,倒数60秒后,完成提醒功能,可以按另外一个页面跳转到主页. 参考网上的大神,实现如下:Button2倒数,Button3跳转,在页面上 ...