- ServerSocket 服务端,可通过accept方法监听请求,监听到请求后返回Socket
-
package com.sycamore.demo2.controller.socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 1.创建ServerSocket
* 2.调用accept 等待请求
* 3.收到请求后,用返回的Socket创建Reader和Writer来接收和发送数据
* Reader接收到数据后保存到line,然后打印到控制台
* 再将数据发送到client,告诉client接收到的是什么数据
*/
public class Server {
public static void main(String arg[]){
try {
//1.创建一个ServerSocket监听8080端口
ServerSocket server = new ServerSocket(8080);
//2.accept方法进行监听,程序停下来等待连接请求,接收到请求后返回Socket
Socket socket = server.accept();
//3.使用socket进行通信,创建BufferedReader读取数据
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = is.readLine();
System.out.println("从客户端接收的数据:"+line);
//创建PrintWriter,用于发送数据
PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.println("接收数据:"+line);
pw.flush();
//关闭资源
pw.close();
is.close();
socket.close();
server.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
- Socket 用于具体完成数据传输,客户端直接使用Socket发起请求并传输数据
package com.sycamore.demo2.controller.socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 启动后自动将msg发送给服务端,然后再接收服务端返回的数据并打印到控制台
*/
public class Client {
public static void main(String arg[]){
String msg = "客户端数据";
try {
//创建Socket。连接本机8080端口
Socket socket = new Socket("127.0.0.1",8080);
//使用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("从服务端接收的数据:"+line);
//关闭资源
pw.close();
is.close();
socket.close();
}catch (Exception e){
e.printStackTrace();
}
}
}