赞
踩
通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。
网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互联协议),它是一个包括TCP协议和IP协议,UDP(User Datagram Protocol)协议和其它一些协议的协议组,在学习具体协议之前首先了解一下TCP/IP协议组的层次结构。
在进行数据传输时,要求发送的数据与收到的数据完全一样,这时,就需要在原有的数据上添加很多信息,以保证数据在传输过程中数据格式完全一致。TCP/IP协议的层次结构比较简单,共分为四层,如图所示。
链路层: 链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。
网络层: 网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
传输层: 主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
应用层: 主要负责应用程序的协议,例如HTTP协议、FTP协议等。
import java.net.InetAddress; import java.net.UnknownHostException; public class InetAddressDemo { public static void main(String[] args) throws UnknownHostException{ // static InetAddress getByName(String host) InetAddress address = InetAddress.getByName("10.8.78.109"); System.out.println(address); String hostAddress = address.getHostAddress(); String hostName = address.getHostName(); System.out.println(hostAddress); System.out.println(hostName); } }
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class SendDemo { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub // 创建发送端Socket对象 DatagramSocket ds = new DatagramSocket(); // 创建数据并打包 String s = "hello udp,I'm comming!"; byte[] bys = s.getBytes(); int length = bys.length; InetAddress address = InetAddress.getByName("127.0.0.1"); int port = 8888; DatagramPacket dp = new DatagramPacket(bys,length,address,port); // 发送数据 ds.send(dp); // 释放资源 ds.close(); } }
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class ReceiveDemo { public static void main(String[] args) throws IOException { // 创建接收端Socket对象 DatagramSocket ds = new DatagramSocket(8888); // 接收数据 byte[] bys = new byte[1024]; DatagramPacket dp = new DatagramPacket(bys,bys.length); ds.receive(dp); // 阻塞的 // 解析数据 InetAddress address = dp.getAddress(); byte[] data = dp.getData(); int length = dp.getLength(); // 输出数据 System.out.println("sender --->" + address.getHostAddress()); System.out.println(new String(data,0,length)); // 释放资源 ds.close(); } }
使用 SendDemo发送数据,接收端收到数据如下:
import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class ClientDemo { public static void main(String[] args) throws IOException { // 创建发送端Socket对象(创建连接) Socket s = new Socket(InetAddress.getByName("127.0.0.1"),10086); // 获取输出流对象 OutputStream os = s.getOutputStream(); // 发送数据 String str = "hello tcp,I'm comming!!!"; os.write(str.getBytes()); // 释放资源 os.close(); s.close(); } }
如果不编写接收程序,会报错:
import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class ServerDemo { public static void main(String[] args) throws IOException { // 创建接收端Socket对象 ServerSocket ss = new ServerSocket(10086); // 监听(阻塞) Socket s =ss.accept(); // 获取输入流对象 InputStream is = s.getInputStream(); // 获取数据 byte[] bys = new byte[1024]; int len; len = is.read(bys); // 输出数据 InetAddress address = s.getInetAddress(); System.out.println("client --->" + address.getHostName()); System.out.println(new String(bys,0,len)); // 释放资源 s.close(); ss.close(); } }
运行发送客户端:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。