上一节实现了客户端像服务器端发送请求,本节将实现服务器端向客户端回传信息,实现原理很简单,在原来的基础上,在服务器端实现输出流,在客户端实现输入流即可,具体代码如下:
服务器端:
package com.socket.demo;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try{
ServerSocket serverSocket=new ServerSocket(8888);
System.out.println("----------------服务端运行,开始监听请求----------------");
Socket socket=serverSocket.accept();//开始监听
InputStream inputStream=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
//获取请求内容
String info;
while ((info=bufferedReader.readLine())!=null) {
System.out.println("我是服务器端,客户端请求为:"+info);
}
socket.shutdownInput();
//服务器端向客户端回传信息
OutputStream outputStream=socket.getOutputStream();
PrintWriter printWriter=new PrintWriter(outputStream);
printWriter.write("客户端您好,我已经接受到你的信息");
printWriter.flush();
//关闭资源
printWriter.close();
outputStream.close();
bufferedReader.close();
inputStream.close();
socket.close();
serverSocket.close();
}catch(Exception exception){
}
}
}
客户端:
package com.socket.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
try {
//发送到8888端口
Socket socket=new Socket("127.0.0.1", 8888);
//输出流
OutputStream outputStream=socket.getOutputStream();
PrintWriter printWriter=new PrintWriter(outputStream);
printWriter.write("服务器端你好,我是客户端。");
printWriter.flush();
socket.shutdownOutput();//这个不能少!!!!!!!!!!!!!!
//接受服务器端回传的信息
InputStream inputStream=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
String info;
while ((info=bufferedReader.readLine())!=null) {
System.out.println("我是客户端,服务器端返回::"+info);
}
//关闭资源
bufferedReader.close();
inputStream.close();
printWriter.close();
outputStream.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行实例如下:
服务器控制台输出:
客户端控制台输出:
话说怎么切换控制台?
点击这个电脑旁边的小按钮即可选择控制台了。
在实现本功能时还出现了一个小问题,如下:
原因是没有在客户端关闭输出,即这一行代码:
socket.shutdownOutput();
这里要注意。
喜欢的朋友请关注我,谢谢