网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
Socket编程多用于C/S结构的项目:
服务器端需要创建ServerSocket对象,并监听客户端发起的连接请求;客户端创建Socket对象。两者通过IO流交换数据。
Demo:
Server端
/**
* Created by Mr.Wang on 2019/2/27.
*/
public class ServerSocketDemo {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888); //1.建立ServerSocket
System.out.println("----这是服务器端,正在监听请求-----");
Socket socket = serverSocket.accept(); //2.监听获取客户端发来请求,并建立Socket对象进行通信
System.out.println("----服务器端已与客户端连接成功----");
InputStream inputStream = socket.getInputStream(); //获取socket的输入流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
System.out.println("----客户端发来如下消息----");
String msg = null;
while((msg = bufferedReader.readLine()) != null){
System.out.println(msg);
}
socket.shutdownInput(); //获取输出流之前必须先关闭输入流
OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.write("欢迎您");
printWriter.flush();
bufferedReader.close(); //关闭资源
inputStream.close();
outputStream.close();
printWriter.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}
客户端:
/**
* Created by Mr.Wang on 2019/2/27.
*/
public class ClientSocketDemo {
public static void main(String[] args) {
try {
System.out.println("***这是客户端,准备向连接到服务器***");
Socket socket = new Socket("127.0.0.1",8888);
System.out.println("***已与服务器端连接***");
OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.write("用户名:123, 密码:321");
printWriter.flush();
socket.shutdownOutput(); //获取输入流之前必须先关闭输出流
InputStream inputStream = socket.getInputStream(); //获取socket的输入流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
System.out.println("***服务器端发来如下消息***");
String msg = null;
while((msg = bufferedReader.readLine()) != null){
System.out.println(msg);
}
printWriter.close();
outputStream.close();
bufferedReader.close();
inputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}