普通Socket的用法
Java中的网络通信是通过Socket实现的
Socket分为两类:
- ServerSocket:用于服务端,可以通过accept方法监听请求,监听到请求后返回Socket。
- Socket:用于具体完成数据传输,客户端直接使用Socket发起请求并传输数据。
ServerSocket(服务端)
ServerSocket的使用可分为三步:
- 创建 ServerSocket。
- 调用创建出来的 ServerSocket 的 accept 方法进行监听。
- 使用 accept 方法返回的 Socket 与客户端进行通信。
Server.java
package com.jeiker.demo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author : xiao
* @date : 17/10/22 下午3:09
* @description : Socket 服务端程序
*/
public class Server {
public static void main(String srgs[]){
try {
// 创建一个ServerSocket监听8080端口
ServerSocket serverSocket = new ServerSocket(8888);
// 等待请求
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 pw = new PrintWriter(socket.getOutputStream());
pw.println("received data: " + line);
pw.flush();
// 关闭资源,注意顺序
pw.close();
is.close();
socket.close();
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Socket(客户端)
ServerSocket的使用可分为三步:
- 创建 ServerSocket。
- 调用创建出来的 ServerSocket 的 accept 方法进行监听。
- 使用 accept 方法返回的 Socket 与客户端进行通信。
Client.java
package com.jeiker.demo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* @author : xiao
* @date : 17/10/22 下午3:34
* @description : Socket 客户端程序
*/
public class Client {
public static void main(String args[]) {
String msg = "Client Data";
try {
// 创建一个Socket,跟本机的8080端口连接
Socket socket = new Socket("localhost", 8888);
// 使用Socket 创建PrintWriter和BufferedReader进行读写数据
PrintWriter pw = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 发送数据
pw.println(msg);
pw.flush();
// 接收数据
String line = is.readLine();
System.out.println("received from server: " + line);
// 关闭资源
pw.close();
is.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行
先启动 Server,再运行 Client 。