三、SOCKET 客户端

SOCKET 客户端主动请求外部机器

1、配置

[SOCKET CLIENT]

;for client 是否开启服务器主动请求一个外部socket,默认是每分钟检测一次,如果断开,自动重连

socket_client_enable=1

;要请求的外部主机地址
socket_client_host=localhost

;要请求的外部主机端口
socket_client_port=7777

;是否启用类覆盖
socket_client_override=0

;如果启用类覆盖,指定用来覆盖的类名,必须继承SocketClient
socket_client_class=test.z.socket.MySocketClient

;外部主机响应后调用类的包名设置
socket_client_package=test.z.socket

 

2、信息回应与响应类,每次不能大于1024字节

void sendc(String content)//只能在响应类中调用

void sendc(byte[] content)//只能在响应类中调用

boolean csend(String content)//全局可调用

boolean csend(byte[] content)//全局可调用

 

外部机器请求发送数据格式:

{"app":"test","data":{"name":"sfsd"}}//其它请求,app指自己写的继承于JkasSocketClient的类,act:该类的方法,没传act默认为index

socket client响应类编写:

socket client类必须继承于JkasSocketClient,方法类型不限定,但最终会以字符串输出到客户端

获取前端参数,即data数据方法:

String D()//获取整 个data数据

String D(String key)//获取json结构的data数据指定key的值

案例:

package test.z.socket;
import org.jkas.core.JkasSocketClient;
public class TestClient extends 
JkasSocketClient
{ public String index()
 {return D("name");
 }
}


 

响应输出:
{"code":404,"msg":"Bad Request"}//app或act名称不符要求
{"code":200,"msg":"success"}//收到非Json信息,不做任何处理

{"code":404,"msg":"Please set the package in the configuration file first."}//包名没配置输出

{"code":404,"msg":"notice messages"}//各种提示信息

{"code":500,"msg":"invalid json data"}//请求的JSON数据格式错误

如果是自定义类,字符串原样输出

 

3、自定义Socket Client

自定义socket client的类,必须继承SocketClient
并且要同时开启

socket_client_enable=1
socket_client_override=1

开启自定义socket client后,socket client响应类转发将失效

 

覆盖如下方法进行自定义类的实现,可以不全部覆盖:

public void OnConnection(SocketChannel channel)//连接成功

public void OnMessage(SocketChannel channel,byte[] message)//收到信息

public void OnError(SocketChannel channel,String error)//出现错误

public void OnClose(SocketChannel channel)//关闭连接

案例:

package test.z.socket;import 
java.nio.channels.SocketChannel; import 
org.jkas.core.SocketClient;public class MySocketClient extends 
SocketClient{  
public MySocketClient() { }
 public void OnConnection(SocketChannel sc) { }
public void OnMessage(SocketChannel sc,byte[] message)
{String msg=""; try { msg=new String(message);        
}catch(Exception e) {msg=e.toString();  }
 sendc("goods");
}
 public void OnClose(SocketChannel sc) {System.out.println("socket close"); }
}