- ServiceServer 服务端,一开始启动这个
package com.huachao.socket;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class ServiceServer {
public static void main(String[] args) throws Exception {
//创建一个ServerSocket
ServerSocket server = new ServerSocket();
//绑定到本机的8899端口
server.bind(new InetSocketAddress("localhost", 8899));
//接收客户端请求
//accept是一个阻塞方法,会一直等待,到有客户端请求连接才返回
while(true){
Socket socket = server.accept();
new Thread(new ServiceServerTask(socket)).start();
}
}
}
package com.huachao.socket;
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;
public class ServiceServerTask implements Runnable{
private Socket socket;
public ServiceServerTask(Socket socket) {
this.socket = socket;
}
//业务逻辑:跟客户端进行数据交互
@Override
public void run() {
InputStream in = null;
OutputStream out = null;
try {
in = socket.getInputStream();
out = socket.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
PrintWriter pw = new PrintWriter(out);
//从网络通信输入流中读取客户端发送过来的数据
//注意:socketinputstream的读数据的方法都是阻塞的
String param = br.readLine();
/**
* 作业:
* 将以下业务调用逻辑写成更加通用的:可以根据客户端发过来的调用类名、调用方法名、调用该参数来灵活调用
*
* 《反射》
*
*/
GetDataServiceImpl impl = new GetDataServiceImpl();
String result = impl.getData(param);
pw.println(result);
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
in.close();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.huachao.socket;
public class GetDataServiceImpl {
public String getData(String param){
return "ok-"+param;
}
}
package com.huachao.socket;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class ServiceClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 8899);
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
PrintWriter pw = new PrintWriter(out);
pw.println("hello");
pw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String result = br.readLine();
System.out.println(result);
in.close();
out.close();
socket.close();
}
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。