linux网络编程 华清,Linux网络编程之套接字

一 :套接字属性

套接字由域(domain),类型(type)和协议(protocol)三个属性确定其特性。

1)套接字的域

域指定套接字通信中使用的网络 介质,常见的套接字域是AF_INET,它指的是互联网络,许多LINUX局域网使用的都是该网络。

服务器上可能同时有多个服务正在运行,客户可以通过IP端口来指定一台联网机器上的某个特定服务。在系统内部,端口通过分配一个唯一的16位整数来标识,在系统外部,则需要通过IP地址和端口号的组合来确定。套接字作为通信的终点,它必须在开始通信之前绑定一个端口。

服务器在特定的端口等待客户的连接,知名服务器所分配的端口号在所有LINUX和UNIX机器上都是一样的,它们通常(但并不总是如此)小于1024,一般情况下,小于1024的端口号都是为系统服务保留的,并且所服务的进程必须具有超级用户权限。

其它可以使用的域如AF_UNIX,AF_ISO,AF_XFA等。

2)套接字类型

套接字有三种类型:流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)及原始套接字。

1、流式套接字(SOCK_STREAM)

流式套接字提供的是一个有序,可靠,双向字节流的连接。因此,发送的数据可以确保不会丢失,复制或乱序到达,并且在这一过程 中发生的错误也不会显示出来。流式套接字由类型SOCK_STREAM指定,它们是地AF_INET域中通过TCP/IP连接来实现的,它们也是AF_UNIX域中常用的套接字类型。

2、数据报套接字(SOCK_DGRAM)

与此相反 ,由SOCK_DGRAM指定的数据报套接字不建立和维持一个连接,它寻可以发送的数据报的长度有限制。数据报作为一个单独的网络消息被传输,它可能会丢失,复制或乱序到达。数据报套接字是在AF_INET域中通过UDP/IP连接来实现的,它提供的是一种无序的不可靠服务,但从资源的角度来看,相对来说它们开销比较小,因为不需要维持网络连接,而且因为无需花费时间来建立连接,它们的速度也很快。

3、原始套接字

二 :套接字协议

只要底层传输机制允许不止一个协议来提供所要求的套接字类型,就可以为套接字选择一个特定的协议。我们重点讨论UNIX网络套接字和文件系统套接字,它们不需要你 选择一个特定的协议,只需要使用其默认值即可。

三 :创建套接字

socket系统调用创建一个套接字并返回一个描述符,该描述符可以用来访问该套接字。

#include < sys/types.h>

#include < sys/socket.h>

socket函数原型为:

int socket(int domain, int type, int protocol);

domain参数指定socket的类型,一般为AF_INET,type可以是SOCK_STREAM 或SOCK_DGRAM,分别表示TCP连接和UDP连接;protocol通常赋值"0"。Socket()调用返回一个整型socket描述符,你可 以在后面的调用使用它。

一旦通过socket调用返回一个socket描述符,你应该将该socket与你本机上的一个端口相关联(往往当你在设计服务器端程序时需要调用该函数。随后你就可以在该端口监听服务请求;而客户端一般无须调用该函数)。

五:套接字地址

每个套接字域都有其自己的地址格式。对于AF_INET域来说,套接字地址由结构sockaddr_in来指定,该结构在头文件netinet/in.h中定义。

我们要讨论的第一个结构类型是:struct sockaddr,该类型是用来保存socket信息的:

struct sockaddr

{

unsigned short sa_family; /* 地址族, AF_xxx */

char sa_data[14]; /* 14 字节的协议地址 */

};

sa_family一般为AF_INET;sa_data则包含该socket的IP地址和端口号。

另外还有一种结构类型:

struct sockaddr_in

{

short int sin_ family; /* 地址族 */

unsigned short int sin_port; /* 端口号 */

struct in_addr sin_addr; /* IP地址 */

unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */

};

这个结构使用更为方便。sin_zero(它用来将sockaddr_in结构填充到与struct sockaddr同样的长度)应该用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向 sockaddr_in的指针转换为指向sockaddr的指针;或者相反。sin_family通常被赋AF_INET;sin_port和 sin_addr应该转换成为网络字节优先顺序 。

IP地址结构struct in_addr被定义为:

struct in_addr

unsigned long int s_addr;

};

IP地址中的四个字节组成一个32位的值。

这是几个字节顺序转换函数:

htons()--"Host to Network Short" ; htonl()--"Host to Network Long"

ntohs()--"Network to Host Short" ; ntohl()--"Network to Host Long"

在这里,h表示"host" ,n表示"network",s 表示"short",l表示 "long"。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用数据结构c语言写成绩排序,C语言数据结构 快速排序实例详解

C语言数据结构 快速排序实例详解一、快速排序简介快速排序采用分治的思想&#xff0c;第一趟先将一串数字分为两部分&#xff0c;第一部分的数值都比第二部分要小&#xff0c;然后按照这种方法&#xff0c;依次对两边的数据进行排序。二、代码实现#include /* 将两个数据交换 *…

c语言进制转换pdf下载,C语言 十六进制和十进制间的转换.pdf

1.将十六进制转换为十进制.#include#includeint main(void){int convert(int,char *);int i,j ;char m[20];printf("请输入你要转换的数:");scanf("%s",m);i 0;while(*(mi)! \0){i;}j convert(--i,m);printf("转换为十进制是:%d\n",j );return 0…

c语言 为什么i%3cn 1,c语言中n+1个基础且容易出错的知识点

前言为什么称为是n1呢&#xff0c;因为我会持续更新本条博客。1.“/”与“%”基本用法除法运算符“/” &#xff1a;二元运算符&#xff0c;具有左结合性。参与运算的量均为整形时&#xff0c;结果为整型&#xff0c;舍去小数。如果运算量中有一个实型&#xff0c;结果为双精度…

第二次上机报告c语言,第二次C语言设计上机报告

任务一&#xff1a;显示美元与人民币的汇率。实验内容&#xff1a;编写一个“美元与人民币汇率”的C程序。实验目的&#xff1a;进一步掌握C程序的编写和运行的结果。我的程序//***********************************#includeint main(){int dollar,RMB;int lower,upper,step;lo…

c语言使用循环编写勾股数,刘徽《九章算术》中的勾股数

若A、B、C为满足A2B2C2的正整数。我国古代数学书《周髀算经》曾经提到“勾广三&#xff0c;股修四&#xff0c;径偶五”这三个边都是正整数的直角三角形。在公元263年时&#xff0c;我国数学家&#xff1a;刘徽写了一本数学书&#xff0c;书名叫作《九章算术》&#xff0c;其中…

c语言边序列构造邻接表,结构C语言版期末考试考试(有答案).doc

人生难得几回搏&#xff0c;此时不搏更待何时&#xff1f;"数据结构"期末考试试题一、单选题(每小题2分共12分)1&#xff0e;在一个单链表HL中若要向表头插入一个由指针p指向的结点则执行( )A&#xff0e; HL&#xff1d;ps p一>next&#xff1d;HLB&#xff0e; …

c语言打不开h文件,说那个“mem.h”头文件打不开 怎么改啊 高手们帮帮忙

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include "stdio.h"#include "stdlib.h"#include "string.h"#include "conio.h"#include "mem.h"#include "ctype.h"#include "alloc.h"struct score{char…

C语言中表示温度符号,摄氏度符号怎么打(SCI论文中摄氏度°C符号的正确输法)...

大家可能知道中文的摄氏度百思特网是一个字符&#xff0c;而且输入方法比较简单&#xff0c;可以用搜狗输入法&#xff0c;还可以输入 "sheshidu"&#xff0c;第五个一般就是℃&#xff0c;甚至可以在网上或文献中复制粘贴。而英文的摄氏度C 却是两个字符&#xff0c…

利用spi发送接收信息c语言,SPI接收发送函数程序

unsigned char SPI_RW(unsigned char byte){?? ?unsigned char bit_ctr;?? ?for(bit_ctr0;bit_ctr<8;bit_ctr)?? ?{?? ??? ?NRF_MOSI(byte&0x80); // MSB TO MOSI?? ??? ?byte(byte<<1);?? ?// shift next bit to MSB?? ??? ?NRF_S…

android 跳转权限管理的代码,Android权限管理

Android权限管理说明在targetSdkVersion的值为23或者更高&#xff0c;就要进行权限管理&#xff0c;否则如果运行在Android6.0或以上的设备会没有相应权限而导致崩溃请求权限后&#xff0c;在onRequestPermissionsResult方法回调&#xff0c;在该方法判断三种状态&#xff1a;允…

android filehelper,为AndroidStudio开发mvp插件(MvpHelper)

如果觉得写mvp有点枯燥无味&#xff0c;我们可以做点 cool 的事情&#xff1a;做个 as 插件help.pngtodo-mvp: 基础的MVP架构。todo-mvp-loaders:基于MVP架构的实现&#xff0c;在获取数据的部分采用了loaders架构。todo-mvp-databinding: 基于MVP架构的实现&#xff0c;采用了…

android+5.q,MSM8909+Android5.1.1电池管理(2)--qpnp-linear-charger.txt驱动学习概要

MSM8909Android5.1.1电池管理(2)--qpnp-linear-charger.txt驱动学习概要参考文件\kernel\Documentation\power\qpnp-linear-charger.txt---下面是学习此文件\kernel\Documentation\devicetree\bindings\power\qpnp-linear-charger.txt1. 简介The QPNP linear charger drive…

岳阳鸿蒙数学培优阶梯训练,鸿蒙应用-呼吸训练app部分练习展示(开始)

本帖最后由 李洋水蛟龙 于 2020-12-20 18:11 编辑1.在主页面添加一个按钮并响应点击事件效果显示&#xff1a;图片1.png (404.17 KB, 下载次数: 0)2020-12-10 17:53 上传点击按钮“点我”下方便会显示“我被点击了”说明点击事件已完成代码如下&#xff1a;Index.hml文件中Hell…

Android无法优化应用,Android应用优化总结

原标题&#xff1a;Android应用优化总结内存泄漏最常见也是最严重的 &#xff1a;持有Activity 与Context引用&#xff0c;生命周期本该短于应用生命周期&#xff0c;该回收的没被回收掉&#xff0c;导致泄露检测手段&#xff1a;leakcanary mit等Handler泄露new Handler 替换为…

android日期选择滚轮框架,GitHub - liwenzhi/wheelview: 滚轮效果的View,日期选择器

#wheelview滚动效果的View这段时间需要用到一个时间选择器&#xff0c;但是不能使用日期对话框&#xff0c;因为它是筛选条件框架下的&#xff0c;只能是View&#xff01;这个WheelView改造后可以达到要求&#xff01;这个wheelview框架使用的类不多&#xff0c;就几个&#xf…

html页面返回原理,浏览器输入URL到界面显示(HTML渲染)发生了什么?

浏览器从输入URL到界面显示一共经历了6个阶段1. DNS(域名)解析2. TCP连接(三次握手)3. 发送HTTP请求4. 服务器处理请求并返回HTTP报文5. 浏览器解析渲染页面6. 连接结束1. DNS(域名)解析一个网址到ip地址的转换&#xff0c;找到URL对应的IP。如www.xiaochongtec.cn到22.33.55.6…

nginx缓存HtmL文件,Nginx在缓存的html文件上返回404

我试图在没有索引页的所有.html文件中添加缓存&#xff0c;但是当我做了一些更改时&#xff0c;我的文件进入了404找不到页面。Nginx在缓存的html文件上返回404这是我对我的默认配置&#xff0c;没有任何改变&#xff0c;我做了&#xff0c;没有工作。server {listen 80;server…

韩顺平轻松搞定网页设计(html+css+js),韩顺平轻松搞定网页设计方案(html+css+js)之javascript现场授课笔记(完整版).doc...

2011韩顺平轻松搞定网页设计(htmlcssjs)之javascript现场授课笔记(完整版)视频18整和19的前半部分不用看Javascript的基本介绍JS是用于WEB开发的脚本语言&#xff1a;脚本语言是什么&#xff1a;脚本语言不能独立使用&#xff0c;它和HTML/JSP/PHP/ASP.NET配合使用脚本语言也有…

大学计算机基础知识点图文,大学计算机基础知识点超详细总结

大学计算机基础知识点超详细总结 第一章 计算机及信息技术概述1. 电子计算机的发展历程①1946 年 2 月由宾夕法尼亚大学研制成功的 ENIAC 是世界上第一台电子数字计算机。 “诞生了一个电子的大脑” 致命缺陷&#xff1a;没有存储程序。②电子技术的发展促进了电子计算机的更新…

计算机专业学comsol,有关COMSOL的学习心得,与同是初学者的朋友共勉! - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

接触COMSOL也有一年时间了&#xff0c;相信很多朋友都有这样的感触&#xff0c;那就是完全不知所措&#xff0c;无从下手。根据网上的一些经验&#xff0c;参考案例&#xff0c;看用户手册&#xff0c;折腾了几个月甚至大半年的时间&#xff0c;对于模型计算的各种错误一头雾水…