当前位置:   article > 正文

java 网络编程 TCP/UDP发送接收数据_java接收网络端口数据

java接收网络端口数据

1. 概述

1.1 网络协议

通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。
网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互联协议),它是一个包括TCP协议和IP协议,UDP(User Datagram Protocol)协议和其它一些协议的协议组,在学习具体协议之前首先了解一下TCP/IP协议组的层次结构。
在进行数据传输时,要求发送的数据与收到的数据完全一样,这时,就需要在原有的数据上添加很多信息,以保证数据在传输过程中数据格式完全一致。TCP/IP协议的层次结构比较简单,共分为四层,如图所示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

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

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

1.2 IP地址和端口号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. InetAddress

在这里插入图片描述

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);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述

3. java UDP协议发送数据

  • 创建发送端Socket对象
  • 创建数据并打包
  • 发送数据
  • 释放资源
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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();
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

4. java UDP协议接收数据

  • 创建接收端Socket对象
  • 接收数据
  • 解析数据
  • 输出数据
  • 释放资源
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();
		
	}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

使用 SendDemo发送数据,接收端收到数据如下:
在这里插入图片描述

5. java TCP协议发送数据

  • 创建发送端Socket对象(创建连接)
  • 获取输出流对象
  • 发送数据
  • 释放资源

在这里插入图片描述
在这里插入图片描述

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();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

如果不编写接收程序,会报错:
在这里插入图片描述

6. java TCP协议接收数据

  • 创建接收端Socket对象
  • 监听(阻塞)
  • 获取输入流对象
  • 获取数据
  • 输出数据
  • 释放资源
    在这里插入图片描述
    在这里插入图片描述
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();
		
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

运行发送客户端:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/850681
推荐阅读
相关标签
  

闽ICP备14008679号