Java小白第一次就能看懂的网络编程攻略
什么是网络编程
网络编程指的是利用计算机网络进行通讯和信息交换的程序设计。Java中的网络编程是通过Java自带的网络库进行开发。 Java中的网络编程有两种:基于TCP协议的Socket编程和基于UDP协议的DatagramSocket编程。
Socket编程
Socket编程是指采用TCP协议来进行编程,是一个基于流的网络编程模型,主要用于端到端的数据传输和通信。
建立一个Socket连接
在Java中,可以通过构造函数创建一个Socket连接对象,示例代码如下:
Socket socket = new Socket("127.0.0.1", 8000);
其中,127.0.0.1
表示要连接的IP地址,8000
表示要连接的端口号。
发送数据
利用Java中的OutputSteam类可以将消息写入到Socket连接中,示例代码如下:
OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println("Hello World");
printWriter.flush();
其中,PrintWriter
是一个输出流。在这里,我们可以将需要发送的消息使用printWriter.println()
方法写入流中,并且调用flush()
方法将其发送出去。
接收数据
利用Java中的InputStream类可以从Socket连接中读取数据,示例代码如下:
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String message = bufferedReader.readLine();
System.out.println(message);
其中,BufferedReader
是一个输入流。这里我们可以使用readLine()
方法从输入流中获取一行数据,然后将其输出到控制台。
DatagramSocket编程
DatagramSocket编程是基于UDP协议进行编程的,是一个不可靠的、无连接的网络编程模型。
创建一个DatagramSocket对象
在Java中,我们使用构造函数创建一个DatagramSocket对象,示例代码如下:
DatagramSocket socket = new DatagramSocket();
发送数据
使用DatagramPacket对象将需要发送的数据打包,并调用DatagramSocket对象的send方法发送数据。
byte[] buffer = "Hello World".getBytes();
int port = 8000;
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
socket.send(packet);
接收数据
使用DatagramPacket对象接收数据,示例代码如下:
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
socket.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
System.out.println(message);
其中,new byte[1024], 1024
表示接收数据的缓冲区大小。packet.getData()
可以获取到接收到的数据,new String(packet.getData(), 0, packet.getLength())
将其转换成字符串并输出到控制台。
示例说明
示例一:Socket编程
下面是一个简单的Socket编程的示例,服务器端和客户端可以互相发送消息,并将其输出到控制台中。
服务器端代码:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8000);
System.out.println("服务器在8000端口监听");
Socket socket = serverSocket.accept();
System.out.println("客户端已连接");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String message = bufferedReader.readLine();
System.out.println("客户端说:" + message);
System.out.println("请输入回复:");
String reply = consoleReader.readLine();
printWriter.println(reply);
printWriter.flush();
}
}
}
客户端代码:
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 8000);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("请输入消息:");
String message = consoleReader.readLine();
printWriter.println(message);
printWriter.flush();
String reply = bufferedReader.readLine();
System.out.println("服务器回复:" + reply);
}
}
}
示例二:DatagramSocket编程
下面是一个简单的DatagramSocket编程的示例,服务器端和客户端可以互相发送消息,并将其输出到控制台中。
服务器端代码:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Server {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(8000);
System.out.println("服务器在8000端口监听");
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (true) {
datagramSocket.receive(packet);
String message = new String(packet.getData(), packet.getOffset(), packet.getLength());
System.out.println("客户端说:" + message);
System.out.println("请输入回复:");
System.in.read(buffer);
DatagramPacket replyPacket = new DatagramPacket(buffer, buffer.length, packet.getSocketAddress());
datagramSocket.send(replyPacket);
}
}
}
客户端代码:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Client {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket();
byte[] buffer = new byte[1024];
while (true) {
System.out.println("请输入消息:");
System.in.read(buffer);
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("127.0.0.1"), 8000);
datagramSocket.send(packet);
DatagramPacket replyPacket = new DatagramPacket(new byte[1024], 1024);
datagramSocket.receive(replyPacket);
String reply = new String(replyPacket.getData(), replyPacket.getOffset(), replyPacket.getLength());
System.out.println("服务器回复:" + reply);
}
}
}
通过以上示例,可以初步了解Java中网络编程的基本知识,使得Java小白也可以轻松实现网络编程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java小白第一次就能看懂的网络编程 - Python技术站