linux c网络编程之函数
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为字符串指针,可以为指针,也可以是数组名
linux c网络编程之函数的更多相关文章
- 嵌入式linux的网络编程(1)--TCP/IP协议概述
嵌入式linux的网络编程(1)--TCP/IP协议概述 1.OSI参考模型及TCP/IP参考模型 通信协议用于协调不同网络设备之间的信息交换,它们建立了设备之间互相识别的信息机制.大家一定都听说过著 ...
- Linux C网络编程学习笔记
Linux C网络编程总结报告 一.Linux C 网络编程知识介绍: 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端:(client) 在网络程序中, ...
- Linux C++ 网络编程学习系列(1)——端口复用实现
Linux C++ 网络编程学习系列(1)--端口复用实现 源码地址:https://github.com/whuwzp/linuxc/tree/master/portreuse 源码说明: serv ...
- c/c++ 网络编程 getaddrinfo 函数
网络编程 getaddrinfo 函数 解析网址,返回IP地址. 例子: #include <iostream> #include <string.h> #include &l ...
- c/c++ 网络编程 bind函数
网络编程 bind函数 bind的作用是确定端口号. 正常处理都是先bind,然后listen 如果不bind,直接listen,会是什么结果? 内核会自动随机分配一个端口号 例子: #include ...
- Linux网络编程-readn函数、writen函数、readline函数实现
readn函数功能:在网络编程的读取数据中,通常会需要用到一个读指定字节才返回的函数,linux系统调用中没有给出,需要自己封装. readn实现代码: int readn(int fd, void ...
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- 【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)
RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [ ...
- 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)
RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三 多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...
随机推荐
- python常用的内置库
标准库: import os os.getcwd() //返回当前工作路径 os.chdir('/server/accesslogs') # Change current working dir ...
- 配置Java开发IDE
http://www.cnblogs.com/feichexia/archive/2012/11/07/Vim_JavaIDE.html
- Unity3D之GUITexture的坐标体系
Unity3D的GUITexture的坐标,其中x和y的取值在0~1之间,层次使用z来划分,值越大越靠前.
- python tips(持续更新)
1. 引用上一层目录 import syssys.path.append('..')import xx 2. python json JSON是一种轻量级的数据交换格式.可以解决数据库中文存储问题,对 ...
- Java特性-HashMap
想分享一个对HashMap的理解: 我们首先要知道一个HashMap对象的构成,一般的理解是:一个Map里面放了很多个键值对,合在一起就是一个键值对的数组: 大概这么理解没问题,可是有一点要说明一下, ...
- [网络技术][转]网卡的offload概念
网络数据包分析 网卡Offload 对于网络安全来说,网络传输数据包的捕获和分析是个基础工作,绿盟科技研究员在日常工作中,经常会捕获到一些大小远大于MTU值的数据包,经过分析这些大包的特性,发现和网卡 ...
- ueditor 图片上传功能(.net)
假如下载的net文件 所在工程引用bin文件中的Newtonsoft.Json.dll 在浏览器中运行 `net/controller.ashx`,如果返回 "`{"state&q ...
- 【解决方法】安装Win7和linux双系统后,linux报错“无法分配所提交的分区 not enough free space on disks”问题,以及win7无法启动“BootMGR image is corrupt....”问题
近日,在笔记本上重装了Win7 企业版(64位)后,想装个linux双系统,于是开始安装 centOS 6.2(光盘安装) 硬盘分了一个主分区(c盘),一个扩展分区(3个逻辑分区:d,e,f盘),然后 ...
- Qt中sizeof
class a{ int d; // virtual void ssss(); }; qDebug() <<sizeof(a) << sizeof(int) << ...
- Celery 框架学习笔记
在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式. 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是 ...