网络地址分类(32位网络地址)

A类地址:第一个字节为网络地址,其他3个字节主机地址,第一字节的最高位固定为0

从1.0.0.1------126.255.255.255

B类地址:第一字节和第二字节为网络地址,其他2个字节为主机地址,第一字节前两位固定为10

从128.0.0.1---191.255.255.255

C类地址:前三个字节为网络地址,最后一个字节是主机地址,第一字节的前三位固定为110

从192.0.0.1----223.255.255.255

D类地址:组播地址

不分网络地址和主机地址,第一字节的前四位固定为1110

224.0.0.1-----239.255.255.255

注意几点:

1、192.168.1.255为广播地址,任何主机都是不能使用的。

2、每一个网络地址都能组成一个小型的局域网。

3、127.0.0.1测试tcp,udp网络时使用的内部回环网络

几种常见的网络分包格式

一、 tcp数据包格式:

Ethernet header:网络物理接口层(存放了网卡的MAC地址,共48位)

Ip header:网络层,存放了目标主机的ip地址,源主机的ip地址

TCP:传输层,存放了目标主机的port号和源主机的port号。这层确定传输是否可靠

Ethernet trailer:对传输的数据进行CRC校验

发送过程:应用层—>加个应用层头-à加个tcp头---》加个ip头---》加个ethernet 头(指定mac地址)---》最后对数据进行CRC校验。

接收过程:反方向砍掉各种各样的头,先进行CRC校验---》验证MAC地址,如果匹配,则将其砍掉---》验证主机ip地址、匹配,将其砍掉----》验证tcp的port,匹配将其砍掉---》最后只剩下数据了。

Accept的第二个参数填放了目标主机的ip和端口号。

二、 udp数据包格式:

跟tcp差不多,只是传输层的协议改成了udp,面向不链接。

Sendto的倒数第二个参数填放了目标主机的ip及端口等信息

几种常见的网络分包格式

三、 广播udp数据包格式:

与udp数据包有两个地方的区别:

1、 分别是mac地址为FF :FF: FF: FF:FF:FF整个四十八位全为1

2、 在网络层目标ip地址为:192.168.1.255

四、 组播udp数据包格式:

与广播udp数据包格式的区别主要在mac:组播数据包的mac目标地址为:[0 00500]前面为高25位,低23位为目标ip的低23位,这样的话,只要目标ip没有加入到组播,mac地址首先就无法匹配,这样大大提高了数据的传输效率,不用每次都需要匹配到udp 的传输层才能判断出是否要发送数据。

UDP的通信的范例
编程步骤:
服务器(收数据):
、创建socket(socket())得到socketfd
、绑定本机ip(bind())一般绑定宏ip
、先接受数据得到对方的ip和port(recvfrom())
、发送数据(sendto())
、关闭socketfd(close()) (发送数据)
、创建socket(socket())得到socketfd
、初始化对方主机的ip和端口号
、发送数据(sendto)倒数第二参数为对方的ip和port号
、接受数据
、关闭socket(close()) 服务器:
#include<stdio.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include<pthread.h>
#include<strings.h> int main()
{ int socketfd = socket(AF_INET,SOCK_DGRAM,);//、、、、1.创建udp套接字socket得到socketfd
struct sockaddr_in saddr;
memset(&saddr,,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons();
//此处可以使用宏ip(=htonl(INADDR_ANY))该宏ip为一个整型数z转化为二进制L==long
saddr.sin_addr.s_addr = inet_addr("192.168.193.2");
if(bind(socketfd,(struct sockaddr*)&saddr,sizeof(struct sockaddr_in))<)//2、、、、、、绑定本机的ip地址
perror("bind() error!\n"); struct sockaddr_in caddr;
int s = sizeof(struct sockaddr);
char buf[],buf1[];
int n;
while()//、、、、、、、、、、、、、、、、、、、、、、、、3.收发数据
{
bzero(buf,);
//scanf("%s",buf);
if(n = recvfrom(socketfd,buf,,,(struct sockaddr *)&caddr,&s)<)//recvfrom的倒数第二个参数为对方的ip和端口号,recvfrom函数自动获取,因此sendto中的地址就填该结构体。
perror("send() error!\n");
printf("%s",buf);
fgets(buf1,,stdin);
sendto(socketfd,buf1,strlen(buf),,(struct sockaddr *)&caddr,s);
}
close(socketfd);//、、、、、、、、、、4.关闭套接字socketfd }
客户端:
#include<stdio.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include<pthread.h>
#include<strings.h> int main()
{
int socketfd = socket(AF_INET,SOCK_DGRAM,);//、、、、、、、1.创建udp套接字得到socketfd文件描述符
struct sockaddr_in saddr;
memset(&saddr,,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons();
saddr.sin_addr.s_addr = inet_addr("192.168.193.2");//、、、2.初始化结构体sockaddr_in 目标主机的ip,sendto的倒数第二个参数 struct sockaddr_in caddr;
int s = sizeof(struct sockaddr);
char buf[],buf1[];
int n;
while()//、、、、3.发送接收数据.
{
//bzero(buf,20);
fgets(buf,,stdin);
if(n = sendto(socketfd,buf,strlen(buf),,(struct sockaddr *)&saddr,s)<)
perror("recv() error!\n");
// printf("%d\n",n);
bzero(buf1,);
recvfrom(socketfd,buf1,,,(struct sockaddr *)&caddr,&s);
printf("%s",buf1);
}
close(socketfd);//、、、4.关闭socketfd }

网络编程基础+UDP的实现的更多相关文章

  1. java 网络编程基础 UDP协议的Socket:DatagramSocket;广播Socket:MulticastSocket

    什么是UDP协议: UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket 但这两个 Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象.Java 提供了 ...

  2. java 网络编程基础 UDP协议DatagramSocket,MulticastSocket 实现局域网聊天软件(Server + Client模式)

      开发思路: 服务端两个Socket: UDP的DatagramSocket接收客户端消息. 广播multicastSocket 发送广播消息 客户端一个Socket: multicastSocke ...

  3. 【网络编程1】网络编程基础-TCP、UDP编程

    网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...

  4. C#网络编程基础知识

    C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...

  5. 服务器编程入门(4)Linux网络编程基础API

      问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字( ...

  6. Linux 高性能服务器编程——Linux网络编程基础API

    问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字(so ...

  7. Java网络编程和NIO详解开篇:Java网络编程基础

    Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...

  8. python全栈开发从入门到放弃之socket网络编程基础

    网络编程基础 一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务 ...

  9. 网络编程基础之C/S架构和TCP/IP协议

    一.何谓C/S架构 C指的是client(客户端软件),S指的是Server(服务端软件),既然我们的的标题是网络编程基础, 那我们就一起来学习怎样写一个C/S架构的软件,实现服务端与客户端软件基于网 ...

随机推荐

  1. js动态添加-表格逐行添加、删除、遍历取值

    关于js对表格进行逐行添加,今天抽空整理了一下:新建一个html文件(没有编辑器的可以新建一个demo.txt文件,然后改后缀名为demo.html),把下面代码全部贴进去即可.功能包括:表格添加一行 ...

  2. API接口安全性设计

    http://www.jianshu.com/p/c6518a8f4040 接口的安全性主要围绕Token.Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来 ...

  3. WaitForXXX等待无效句柄

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  4. DALI调色温

    DALI调色温模块使用手册 公  司: 深圳市万秀电子有限公司 网  站: http://www.wanxiucx.com 总  机: 0755-23215689 联系人: 张先生 手  机: 139 ...

  5. CCF系列之画图(201409-2)

    试题编号: 201409-2试题名称: 画图时间限制: 1.0s内存限制: 256.0MB问题描述: 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从 ...

  6. IOS 使用 ZbarSDK 二维码扫描

    1. 下载SDK   https://github.com/bmorton/ZBarSDK 2. 引用到项目中 3. 添加引用 4. AppDelegate中添加下面代码 5. 在需要使用扫描的con ...

  7. 前端css常用class命名id命名

    1.常用id的命名: (1)页面结构 容器: container 页头:header 内容:content/container 页面主体:main 页尾:footer 导航:nav 侧栏:sideba ...

  8. python 之pulp 线性规划介绍及举例

    pulp http://pythonhosted.org/PuLP/main/basic_python_coding.html 供水问题 1问题 供水公司有三个水库分别为A,B,C向四个小区甲乙丙丁供 ...

  9. Java并发系列[2]----AbstractQueuedSynchronizer源码分析之独占模式

    在上一篇<Java并发系列[1]----AbstractQueuedSynchronizer源码分析之概要分析>中我们介绍了AbstractQueuedSynchronizer基本的一些概 ...

  10. Base64图片编码优化

    通过对图片进行base64编码,将base64(或其他数据)内嵌在image标签的属性当中(或者CSS中或JavaScript中),可以实现将图片直接嵌入代码中的目的,如此一来,可以减少HTTP请求, ...