之前使用httpserver方式发布地址关联服务,发现每秒只能处理1800条地址,远远没有达到本地计算每秒1万条的速度,于是改变思路,使用socket发布服务。
这是客户端代码
直接上代码
package org.socket;import org.address.AddressTool;
import org.address.entity.StandardAddress;import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;public class AddressSocket {AddressTool ss = new AddressTool();public AddressSocket() throws Exception {ss.loadFromJson("D:\\","address4.json");}/*** 服务端程序*/public void server() throws IOException {// 服务端监听 9528 端口ServerSocket serverSocket = new ServerSocket(9966);System.out.println("等待连接");Socket client = serverSocket.accept();System.out.println("连接成功!");while (true) {try {// 获取客户端输入流InputStream inputStream = client.getInputStream();byte[] bytes = new byte[1024];int read = inputStream.read(bytes);String addr = new String(bytes, 0, read, Charset.defaultCharset());// 客户端发来的消息
// System.out.println("客户端:" + addr);StandardAddress address = ss.getStdAddress(addr);// 给客户端发端东西client.getOutputStream().write(address.toString().getBytes(StandardCharsets.UTF_8));}catch (Exception e){
// System.out.println("无客户端链接!!!");client.close();client = serverSocket.accept();}}}class Task implements Runnable {private ServerSocket serverSocket;/*** 构造函数*/public Task(ServerSocket socket) {this.serverSocket = socket;}@Overridepublic void run() {try {handlerSocket();} catch (Exception e) {e.printStackTrace();}}}private String handlerSocket(){return "";}public static void main(String[] args) throws Exception {AddressSocket tcpSocketServer = new AddressSocket();tcpSocketServer.server();;}
}
结合上一篇socketserver案例,可以发布一个完整的服务了