文档章节

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

摘__星
 摘__星
发布于 2017/03/21 09:29
字数 578
阅读 5
收藏 0

java socket 与  ServerSocket


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


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


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

 <listener> 

    <description>Socket服务随web启动而启动</description> 

    <listener-class>com.controller.ServerSocketListener</listener-class>

 </listener>或者

<!-- <servlet>

    <servlet-name>SocketServlet</servlet-name>

    <servlet-class>com.controller.SocketServlet</servlet-class>

    <load-on-startup>13</load-on-startup>

  </servlet> -->

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

    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();

}

}


}

}

    


 

本文出自 “摘星” 博客,请务必保留此出处http://dx969208484.blog.51cto.com/10422053/1893182

本文转载自:http://dx969208484.blog.51cto.com/10422053/1893182

摘__星
粉丝 0
博文 4
码字总数 0
作品 0
海淀
程序员
私信 提问
基于tcp和udp的socket实现

本文介绍如何用Java实现Socket编程。首先介绍Java针对Socket编程提供的类,以及它们之间的关系。然后分别针对TCP和UDP两种传输层协议实现Socket编程。 1 Java中的Socket编程接口介绍 Java为S...

chjuaner
2017/11/07
79
0
Java Socket编程----通信是这样炼成的

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术...

浮躁的码农
2017/11/07
91
0
使用Java Socket手撸一个http服务器

原文连接:使用Java Socket手撸一个http服务器 作为一个java后端,提供http服务可以说是基本技能之一了,但是你真的了解http协议么?你知道知道如何手撸一个http服务器么?tomcat的底层是怎么...

小灰灰Blog
2018/12/30
371
1
【转】Flex与Java的Socket通信

一、准备: 服务端:JDK1.5 (这个不用介绍了吧?) 服务端IDE:eclipse (它的主页) 客户端:FLEX 3 (Adobe® Flex® 3 是用于构建和维护在所有主要浏览器、桌面和操作系统一致地部署的极...

小编辑
2010/03/05
2.4K
0
12.5-全栈Java笔记:Java网络编程(三)

上节回顾:在学习了Socket在建立客户端和服务器单项通讯中,分别创建独立的Socket,并通过Socket的属性。 那么如何将两个Socket进行连接,从而达到客户端和服务器之间建立输入输出流进行通信...

全栈Java
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部