欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Java网络编程

Java网络编程

2025/2/25 13:50:09 来源:https://blog.csdn.net/ufosuai555/article/details/145397872  浏览:    关键词:Java网络编程

网络是什么?

网络就是计算机之间通过某种方式连接起来,可以进行通信,数据传输,资源共享的一种方式。

ip地址

ip地址就是计算机在网络中的唯一标识,通过ip地址可以找到对应的计算机。

ipv4与ipv6

ipv4是32位的IP地址,用点分十进制表示,例如:192.168.1.1
ipv6是128位的IP地址,用冒号分十六进制表示,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334

端口

端口就是计算机上的一个软件程序,通过端口可以找到对应的软件程序,进行通信。
所以,ip地址和端口组合起来就是计算机上的一个软件程序。

域名

域名就是ip地址的别名,通过域名可以找到对应的ip地址,进行通信。
例如:www.baidu.com对应的ip地址是 [183.240.98.161]

网络协议

网络协议就是计算机之间通信的规则,用于规定数据的格式,传输方式等。
例如:TCP/IP协议,HTTP协议等。

TCP/IP协议

TCP/IP协议是互联网的基础协议,分为四层:应用层,传输层,网络层,数据链路层。

  • 应用层:负责应用程序之间的通信,例如:HTTP,FTP等。
  • 传输层:负责应用程序之间的数据传输,例如:TCP,UDP等。
  • 网络层:负责数据包的传输,例如:IP,ICMP等。
  • 数据链路层:负责数据包的传输,例如:ARP,RARP等。

TCP协议

TCP协议是一种可靠的,面向连接的协议,用于保证数据的完整性和顺序性。

  • 三次握手:建立连接的过程,需要三次握手,确保双方都准备好进行通信。
  • 四次挥手:断开连接的过程,需要四次挥手,确保双方都准备好断开连接。
  • 数据传输:通过TCP协议传输数据,数据会被分成多个数据包,进行传输。

UDP协议

UDP协议是一种不可靠,无连接的协议,用于快速传输数据。

  • 数据传输:通过UDP协议传输数据,数据不会被分成多个数据包,直接进行传输。

网络编程

InetAddress类的使用

InetAddress类是Java中用于表示IP地址的类,可以通过该类获取IP地址,主机名等信息。

获取IP地址

InetAddress address = InetAddress.getByName("www.baidu.com");
String ip = address.getHostAddress();
System.out.println(ip);

获取主机名

InetAddress address = InetAddress.getByName("www.baidu.com");
String hostName = address.getHostName();
System.out.println(hostName);

判断是否可达

InetAddress address = InetAddress.getByName("www.baidu.com");
boolean reachable = address.isReachable(5000);
System.out.println(reachable);

获取本地主机

InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost);

使用Socket类完成TCP通信

Socket是Java中用于网络通信的类,可以通过该类实现客户端和服务器之间的通信。

创建Socket

Socket socket = new Socket("localhost", 8080);

发送数据

OutputStream outputStream = socket.getOutputStream();
outputStream.write("Hello World".getBytes());

接收数据

InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
System.out.println(new String(buffer, 0, len));

关闭Socket

socket.close();

示例一

public class ServerTest {public static void main(String[] args) {try {// 监听6666端口ServerSocket serverSocket = new ServerSocket(6666);// 建立连接套接字Socket socket = serverSocket.accept();// 获取输入流InputStream inputStream = socket.getInputStream();int len = 0;byte[] bytes = new byte[1024];while((len = inputStream.read(bytes)) != -1) {System.out.println("叮咚,来自客户端的又一条信息:" + new String(bytes, 0, len));}OutputStream outputStream = socket.getOutputStream();outputStream.write("娇女我轻扶琴 燕嬉我紫竹林".getBytes());//socket.shutdownOutput();inputStream.close();outputStream.close();socket.close();serverSocket.close();} catch (IOException e) {throw new RuntimeException(e);} finally {}}
}public class ClientTest {public static void main(String[] args) {try {Socket socket = new Socket(InetAddress.getLocalHost(),6666 );OutputStream outputStream = socket.getOutputStream();outputStream.write("今日我赢酒醉,醉把佳人成双对~".getBytes());InputStream inputStream = socket.getInputStream();// 设置结束标记socket.shutdownOutput();int len = 0;byte[] bytes = new byte[1024];while((len = inputStream.read(bytes)) != -1) {System.out.println("叮咚,来自服务器端的又一条信息:" + new String(bytes, 0, len));}outputStream.close();inputStream.close();socket.close();} catch (IOException e) {throw new RuntimeException(e);} finally {}}
}

示例二

public class ServerTest {public static void main(String[] args) {try {// 监听6666端口ServerSocket serverSocket = new ServerSocket(6666);// 建立连接套接字Socket socket = serverSocket.accept();// 获取输入流InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String str = null;while((str = bufferedReader.readLine()) != null) {System.out.println("叮咚,来自客户端的又一条信息:" + str);}OutputStream outputStream = socket.getOutputStream();BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write("娇女我轻扶琴 燕嬉我紫竹林");bufferedWriter.newLine();bufferedWriter.flush();//socket.shutdownOutput();bufferedWriter.close();bufferedReader.close();socket.close();serverSocket.close();} catch (IOException e) {throw new RuntimeException(e);} finally {}}
}public class ClientTest {public static void main(String[] args) {try {Socket socket = new Socket(InetAddress.getLocalHost(),6666 );OutputStream outputStream = socket.getOutputStream();BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write("今日我赢酒醉,醉把佳人成双对~");bufferedWriter.newLine();bufferedWriter.flush();InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));// 设置结束标记socket.shutdownOutput();String str = "";while((str = bufferedReader.readLine()) != null) {System.out.println("叮咚,来自服务器端的又一条信息:" + str);}bufferedReader.close();bufferedWriter.close();socket.close();} catch (IOException e) {throw new RuntimeException(e);} finally {}}
}

netstat命令

netstat -an 查看端口监听和网络情况
netstat -anb 查看端口监听和网络情况,并显示占用端口的程序名称
netstat -anb | more 分页查看端口监听和网络情况,并显示占用端口的程序名称

使用DatagramSocket完成UDP通信

示例

public class ServerTest {public static void main(String[] args) {try {// 创建UDP套接字DatagramSocket datagramSocket = new DatagramSocket(6666);byte[] bytes = new byte[1024];// 创建接收数据的数据包DatagramPacket datagramPacket = new DatagramPacket(bytes,1024);// 接收数据包datagramSocket.receive(datagramPacket);// 拆包int len = datagramPacket.getLength();byte[] data = datagramPacket.getData();System.out.println("叮咚,您有一条由客户端发送的信息:" + new String(data,0,len));data = "让我再靠近一点点 因为你太温暖 我会再变得坚强一点点 因为你太柔软".getBytes();// 创建发送的数据包datagramPacket = new DatagramPacket(data,data.length,InetAddress.getByName("127.0.0.1"),8888);// 发送数据包datagramSocket.send(datagramPacket);// 关闭套接字datagramSocket.close();} catch (SocketException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);} finally {}}
}public class ClientTest {public static void main(String[] args) {try {// 创建UDP套接字DatagramSocket datagramSocket = new DatagramSocket(8888);byte[] data = "城中楼阁 几经风霜".getBytes();// 创建发送数据包,指定发送目的套接字DatagramPacket datagramPacket = new DatagramPacket(data,data.length,InetAddress.getByName("127.0.0.1"),6666);// 发送数据包datagramSocket.send(datagramPacket);// 接收数据包datagramSocket.receive(datagramPacket);// 拆包int len = datagramPacket.getLength();data = datagramPacket.getData();System.out.println("叮咚,收到来自服务器端的一条新的消息:" + new String(data,0,len));// 关闭套接字datagramSocket.close();} catch (SocketException e) {throw new RuntimeException(e);} catch (UnknownHostException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);} finally {}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词