美文网首页
TCP/UDP网络编程通信协议

TCP/UDP网络编程通信协议

作者: Mango_yes | 来源:发表于2017-09-19 10:53 被阅读0次

上图中,TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解。

链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。

网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。

传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。

应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。

1.1IP地址和端口号

要想使网络中的计算机能够进行通信,必须为每台计算机指定一个标识号,通过这个标识号来指定接受数据的计算机或者发送数据的计算机。

在TCP/IP协议中,这个标识号就是IP地址,它可以唯一标识一台计算机,目前,IP地址广泛使用的版本是IPv4,它是由4个字节大小的二进制数来表示,如:00001010000000000000000000000001。由于二进制形式表示的IP地址非常不便记忆和处理,因此通常会将IP地址写成十进制的形式,每个字节用一个十进制数字(0-255)表示,数字间用符号“.”分开,如 “192.168.1.100”。

随着计算机网络规模的不断扩大,对IP地址的需求也越来越多,IPV4这种用4个字节表示的IP地址面临枯竭,因此IPv6便应运而生了,IPv6使用16个字节表示IP地址,它所拥有的地址容量约是IPv4的8×1028倍,达到2128个(算上全零的),这样就解决了网络地址资源数量不够的问题。

通过IP地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序,还需要指定端口号。在计算机中,不同的应用程序是通过端口号区分的。端口号是用两个字节(16位的二进制数)表示的,它的取值范围是0~65535,其中,0~1023之间的端口号用于一些知名的网络服务和应用,用户的普通应用程序需要使用1024以上的端口号,从而避免端口号被另外一个应用或服务所占用。

接下来通过一个图例来描述IP地址和端口号的作用,如下图所示。

1.1InetAddress

public class Example01{

   public static void main(String[] args) throws Exception {

      InetAddress local = InetAddress.getLocalHost();

     InetAddress remote = InetAddress.getByName("www.itcast.cn");

     System.out.println("本机的IP地址:" + local.getHostAddress());

     System.out.println("itcast的IP地址:" + remote.getHostAddress());

     System.out.println("itcast的主机名为:" + remote.getHostName());

    }

}

TCP/UDP

UDP:(适用于即时通信(QQ聊天 对数据准确性和丢包要求比较低,但速度必须快),在线视频(RTSP 速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受的),网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题)等等。)

1,将数据和源及目的封装在数据包中,不需要建立连接

2,每个数据包的大小限制在64k内

3,因无连接,是不可靠协议

4,不需要建立连接,速度快

TCP:(对准确率要求较高,适用于文件传输。邮件发送、上传,下载

1.建立连接,行程传输数据的通道

2.在连接中形成大数据量传输

3.通过三次握手完成连接,是可靠协议

4.必须建立连接,是可靠协议


UDP:

要实现UDP通信需要创建一个发送端程序和一个接收端程序,很明显,在通信时只有接收端程序先运行,才能避免因发送端发送的数据无法接收,而造成数据丢失。因此,首先需要来完成接收端程序的编写。

UDP完成数据的发送

/*

*发送端

* 1,创建DatagramSocket对象

* 2,创建DatagramPacket对象,并封装数据

* 3,发送数据

* 4,释放流资源

*/

public class UDPSend {

public static void main(String[] args)throwsIOException {

//1,创建DatagramSocket对象

DatagramSocket sendSocket =new DatagramSocket();

//2,创建DatagramPacket对象,并封装数据

//public DatagramPacket(byte[]buf,intlength, InetAddress address,intport)

//构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。

byte[ ] buffer ="hello,UDP".getBytes();

DatagramPacket dp =new DatagramPacket(buffer, buffer.length, InetAddress.getByName("192.168.75.58"), 12306);

//3,发送数据

//public void send(DatagramPacket p)从此套接字发送数据报包

sendSocket.send(dp);

//4,释放流资源

sendSocket.close();

 }

}

UDP完成数据的接收

/*

* UDP接收端

*

* 1,创建DatagramSocket对象

* 2,创建DatagramPacket对象

* 3,接收数据存储到DatagramPacket对象中

* 4,获取DatagramPacket对象的内容

* 5,释放流资源

*/

publicclassUDPReceive {

public static void main (String[]args) throws IOException {

//1,创建DatagramSocket对象,并指定端口号

DatagramSocket  receiveSocket = new DatagramSocket(12306);

//2,创建DatagramPacket对象,创建一个空的仓库

byte[ ] buffer=new byte[1024];

DatagramPacket dp = new DatagramPacket (buffer, 1024);

//3,接收数据存储到DatagramPacket对象中

receiveSocket.receive(dp);

//4,获取DatagramPacket对象的内容

//谁发来的数据getAddress()

InetAddress ipAddress=dp.getAddress();

String  ip = ipAddress.getHostAddress();//获取到了IP地址

//发来了什么数据getData()

byte[ ] data=dp.getData();

//发来了多少数据getLenth()

int  length  =  dp.getLength();

//显示收到的数据

String  dataStr  =  new  String(data,0,length);

System.out.println("IP地址:"+ip+"数据是"+dataStr);

//5,释放流资源

receiveSocket.close();

}

}

TCP通信

要实现TCP通信需要创建一个服务器端程序和一个客户端程序,为了保证数据传输的安全性,首先需要实现服务器端程序。

文件上传案例:

目前大多数服务器都会提供文件上传的功能,由于文件上传需要数据的安全性和完整性,很明显需要使用TCP协议来实现。接下来通过一个案例来实现图片上传的功能。如下图所示。原图:文件上传.bmp

文件上传案例多线程版本:


实现服务器端可以同时接收多个客户端上传的文件。

l我们要修改服务器端代码

相关文章

  • java基础-day25-网络编程

    网络编程 1. 网络编程概述 1.1 C/S和B/S 1.2 网络通信协议 1.3 UDP和TCP/IP区别 1....

  • TCP/UDP网络编程通信协议

    上图中,TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层...

  • 史上最简单的Sockte通信--1

    Socket,是基于网络通信协议封装的一个网络通信接口,可以支持TCP或UDP通信协议。通常是应用于TCP协议,这...

  • Python高级第三天

    网络编程初识 tcp聊天室 snd_tcp.py serv_tcp.py udp聊天室 snd_udp.py se...

  • 网络编程

    网络 Socket 基于TCP协议的Socket编程 基于UDP协议的Socket编程

  • (二)网络编程之各种协议

    TCP和UDP 1.网络通信协议 网络通信协议:为什么要有网络通信协议呢?就好比在现实中要有法律法规一样,这样才能...

  • 网络编程

    今日介绍内容 1、网络通信协议 2、UDP通信 3、TCP通信 第一章 网络通信协议 通过计算机网络可以使...

  • 网络编程面试题总结

    网络编程知识→ tcp、udp、http、https 等常用协议tcp协议:传输控制协议(TCP,Transmis...

  • tcp和udp

    【Python网络编程】利用Python进行TCP、UDP套接字编程 http://www.cnblogs.com...

  • socket网络编程-基础知识

    什么是网络编程 网络编程的本质是两个设备之间的数据交换。 Socket、TCP/IP和Udp TCP 传输控制协议...

网友评论

      本文标题:TCP/UDP网络编程通信协议

      本文链接:https://www.haomeiwen.com/subject/jqxwsxtx.html