java 服务器接受数据_Java]Socket和ServerSocket服务器端接受数据

java socket 与  ServerSocket

某次写一个智能设备上传数据,数据每次三秒一条,然后使用c++写的客户端,没有对应java的源码,只能自己手写了,期间各种问题现在总结下

首先用的框架是ssh(我想用那个应该是没什么差别),因为是添加到web项目中的,so我想到的是tomcat启动的时候启动,于是首先必须要有的是后台程序,否则tomcat无法启动成功;话不多说,上源码。。。

web.xml中我最后选用的是listener  监听还有一种是servlet  应该都可以 我最后选择的是 listener

Socket服务随web启动而启动

com.controller.ServerSocketListener

或者

在监听器中启动多线程,后台进程

public class ServerSocketListener implements ServletContextListener {

private ServerThread socketThread;

/**

* 初始化当Servlet容器启动Web应用时调用该方法

*/

public void contextInitialized(ServletContextEvent arg0) {

if (null == socketThread) {

socketThread = new ServerThread();

socketThread.setDaemon(true);

}

System.out.println("启动**********");

socketThread.start();

}

@Override

public void contextDestroyed(ServletContextEvent sce) {

// TODO Auto-generated method stub

}

}

处理socket

public class ServerThread extends Thread{

private ServerSocket serverSocket = null;

public ServerThread() {

try {

if (null == serverSocket) {

this.serverSocket = new ServerSocket(5858);

}

} catch (IOException e) {

e.printStackTrace();

}

}

public void run() {

while (true) {

/ 调用accept()方法开始监听,等待客户端的连接

// 启动线程 此处多线程是因为有多个数据上传,目前想到的是再次启动多线程,实验可用

try {

Socket socket = serverSocket.accept();

new Thread(new Task(socket)).start();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

static class Task implements Runnable {

private Socket socket;

/**

* 构造函数

*/

public Task(Socket socket) {

this.socket = socket;

}

// 线程执行的操作,响应客户端的请求

public void run() {

InputStream is = null;

DataInputStream dis = null;

try {

//必须设置线程超时时长,否则会导致cup过高或者连接通道无法关闭等问题

socket.setSoTimeout(3 * 1000);

// 获取输入流,并读取客户端信息

is = socket.getInputStream();

dis = new DataInputStream(is);

Byte info = null;

if (dis != null) {

while ((info = (byte) dis.readByte()) != null) {// 循环读取客户端的信息

System.out.println(info +"数据======");

}

}

socket.shutdownInput();// 关闭输入流

// 获取输出流,响应客户端的请求

} catch (IOException e) {

// TODO Auto-generated catch block

logger.error("解析信息出错!");

e.printStackTrace();

} finally {

// 关闭资源

try {

/*

* if (isr != null) isr.close();

*/

if (is != null)

is.close();

if (socket != null)

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值