Java中的网络通信是通过Socket实现的,Socket分为ServerSocket和Socket两大类,ServerSocket用于服务端,可以通过accept方法监听请求,监听到请求后返回Socket,Socket用于具体完成数据传输,客户端直接使用Socket发起请求并传输数据。
ServerSocket代码:
package com.Newtest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 1、InputStream、OutputStream
* 处理字节流的抽象类
* InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.
* OutputStream 是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等.
*
* 2、InputStreamReader、OutputStreamWriter
* 处理字符流的抽象类
* InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.
* OutputStreamWriter 是字符流通向字节流的桥梁,它将字符流转换为字节流.
*
* 3、BufferedReader BufferedWriter
* BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,
* 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取.
* BufferedWriter 由Writer类扩展而来,提供通用的缓冲方式文本写入,newLine使用平台自己的行分隔符,
* 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入.
*/
public class Server {
public static void main(String args[]){
try {
//创建一个ServerSocket监听8189端口
ServerSocket serverSocket = new ServerSocket(8189);
//等待请求,accept是阻塞方法,程序阻塞等待接收
Socket socket = serverSocket.accept();
//接收到请求后使用socket进行通信,创建BufferedReader用于读取数据
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = is.readLine();
System.out.println("received from client: " + line);
//创建PrintWriter,用于发送数据
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println("received data: " + line);
printWriter.flush();
//关闭资源
printWriter.close();
is.close();
socket.close();
serverSocket.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
ServerSocket控制台输出:
received from client: Client Data
客户端Socket代码:
package com.Newtest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
String msg = "Client Data";
try {
//创建一个Socket,跟本机的8189端口连接
Socket socket = new Socket("localhost", 8189);
//使用Socket创建PrintWriter和BufferedReader进行读写数据
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//发送数据
printWriter.println(msg);
printWriter.flush();
//接收数据
String line = is.readLine();
System.out.println("received from server;" + line);
//关闭资源
printWriter.close();
is.close();
socket.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
客户端Socket控制台输出:
received from server;received data: Client Data