最近项目涉及到与C的通讯,目的是转发一下信息,Java这边使用的时监听Socket的接口,只要给C提供IP和端口 就行了。

已知Socket的编程有 TCP和UDP协议,据说UDP更快一点 这里使用的UDP编程

1.创建一个服务类PushPrinterServer

import com.util.GetByteEncode;

import com.util.HttpClientUtil;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.nio.ByteBuffer;

import java.nio.CharBuffer;

import java.nio.charset.Charset;

import static com.constants.PrinterSocketConstants.PRINTER_URL;

public class PushPrinterServer extends Thread {

private static final int PORT=9002;//监听的端口号

private static final Logger LOGGER = LoggerFactory.getLogger(PushPrinterServer.class);

private DatagramSocket datagramSocket=null;

public PushPrinterServer(DatagramSocket datagramSocket) {

if (datagramSocket==null){

try {

LOGGER.info("开启推送打印服务器端口"+PORT);

this.datagramSocket = new DatagramSocket(PORT);

}catch (Exception e){

LOGGER.error("开启socket推送打印服务出错");

e.printStackTrace();

}

}

}

@Override

public void run() {

try {

while (!this.isInterrupted()) {

// // 一旦有堵塞, 则表示服务器与客户端获得了连接

byte[] receiveData= new byte[1024];

DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

datagramSocket.receive(receivePacket);// 在接收到信息之前,一直保持阻塞状态

String encoding = GetByteEncode.getEncoding(receiveData);//编码判断

System.out.println("字符编码是:"+encoding);

ByteBuffer byteBuffer = ByteBuffer.wrap(receiveData);

CharBuffer gb18030 = Charset.forName("GB18030").decode(byteBuffer);

ByteBuffer utf8 = Charset.forName("UTF8").encode(gb18030);

String data= new String(utf8.array());

LOGGER.info("客户端发送消息:"+data);

try {

if(receiveData!=null){

HttpClientUtil.requestHttpPost(data,PRINTER_URL);

LOGGER.info("已向管理平台发送请求...");

}

} catch (Exception e) {

e.printStackTrace();

LOGGER.info("向管理平台发送请求失败");

}

}

} catch (Exception e) {

LOGGER.error("推送打印异常: " + e.getMessage());

}

}

public void closeSocketServer(){

if(null!=datagramSocket && !datagramSocket.isClosed())

{

LOGGER.info("关闭推送打印服务器");

datagramSocket.close();

}

}

}

-----------------------------------------------------------------------------------------------

receiveData 是监听接口收到是字节组的源数据,由于发过来的中文乱码,但一直处理不了,所有这里先查出源数据的编码格式,再进行处理,data是处理

完的数据,然后转发一下就好了。

2.创建一个监听类PushPrinterSocketServiceLoader

网上许多写的多写在main方法里面,但是真实的项目怎么办呢,要让它项目已启动就开启线程监听,创建监听类

import com.service.PushPrinterServer;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

public class PushPrinterSocketServiceLoader implements ServletContextListener {

//socket server 线程

private PushPrinterServer pushPrinterServer;

@Override

public void contextInitialized(ServletContextEvent servletContextEvent) {

if(null==pushPrinterServer)

{

//新建线程类

pushPrinterServer=new PushPrinterServer(null);

//启动线程

pushPrinterServer.start();

}

}

@Override

public void contextDestroyed(ServletContextEvent servletContextEvent) {

if(null!=pushPrinterServer && !pushPrinterServer.isInterrupted())

{

System.out.println("推送打印服务器关闭");

pushPrinterServer.closeSocketServer();

pushPrinterServer.interrupt();

}

}

}

3.在web.xml添加配置

com.listener.PushPrinterSocketServiceLoader

java socket监听_Java -socket接口(监听)相关推荐

  1. java socket远空_JAVA Socket超时浅析

    套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字",可以想象它们之间有一条 ...

  2. java socket 线程池_java socket编程的一个例子(线程池)

    服务器程序EchoServer.java: import java.io.*; import java.net.*; import java.util.concurrent.*; public cla ...

  3. java socket 循环读取_java socket tcp(服务器循环检测)

    刚才看了下以前写了的代码,tcp通信,发现太简单了,直接又摘抄了一个,运行 博客:http://blog.csdn.net/zhy_cheng/article/details/7819659 优点是服 ...

  4. java socket编程心跳_Java Socket编程心跳包创建实例解析

    1.什么是心跳包? 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包. 用来判断对方(设备,进程或其它网元)是否正常运行,采用 ...

  5. java socket负载均衡_Java Socket分发服务负载均衡

    1 1. 设备请求分发服务器,分发服务器返回有效的socket服务器ip与port,然后断开连接.2 a) 设备与服务器建立连接.3 b) 服务器接收到连接请求后,立即将分配好的socket服务器ip ...

  6. java属性监听_Java event事件监听属性值变化 demo

    1.定义一个 ValueChangedEvent ValueChangedEvent用于在设置属性值的时候,触发事件. package org.teamlet; import java.util.Ev ...

  7. java服务端监听_Java客户端正在监听WebSphere MQ服务器?

    我需要编写一个监听WebSphere MQ服务器的Java客户机.消息放入服务器的队列中.Java客户端正在监听WebSphere MQ服务器? 我开发了这个代码,但我不确定它是否正确.如果正确,那我 ...

  8. java swing鼠标事件监听_java swing鼠标监听问题

    需要对一个JButton b添加一个监听事件达到创建一个自定义的Position(x,y)的对象: 监听类NewListen中需要用到鼠标在面板上点击取坐标值来完成创建一个Position(x,y)的 ...

  9. JAVA单选组监听_java – 如何将侦听器附加到单选按钮

    我有一个显示各种radiobutton的活动.无线电按钮分组在无线电组中.我希望在检查某个单选按钮时,一些radiobutton会消失.例如,当检查事故按钮时,摔倒,绊倒和疾病的无线电按钮消失.我怎么 ...

  10. java socket 全双工客户端_java socket实现全双工通信

    单工.半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工. 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输. 如果 ...

最新文章

  1. 数据库mongodb和mysql对比
  2. paramterType和resultType的区别
  3. 去中心化无险永续合约Shield即将在以太坊-Kovan网络发布测试活动
  4. in use 大学英语4word_(word)大学英语考试样题四.doc
  5. eclipse修改git账号信息
  6. dedecms 中变量函数
  7. docker 部署 nacos2.x 镜像
  8. 社区奖品之USB电动迷你碎纸机
  9. 软件开发团队的脓包(1-3)皇帝的新装、口号党、废话迷
  10. C# 导入.reg文件
  11. 13.MD5对用户密码进行加密
  12. EBS R12中FND凭证打印警告:OPP响应超时
  13. Mac Excel快捷键
  14. excel单元表格里怎么嵌入表格?Smartbi都能解决
  15. CF1139D Steps to One 题解
  16. Think Server RD350X 板载RAID设置
  17. 如何注销Facebook账户
  18. Instrumentation 介绍与使用
  19. 软件测试之黑盒测试用例的四种设计方法【建议细看】
  20. 魔方APP项目-01-移动端开发相关概念、移动端自适配、元信息(meta)、开发准备、移动端项目搭建(模拟器调试)、APICloud(APICloud 前端框架,获取服务端API接口)

热门文章

  1. 零起点学习Linux系列培训视频 [共61课] (万分感谢寒冰老师分享!)
  2. 谭浩强 C程序设计(第五版)
  3. AVI视频怎么转换成MOV视频
  4. 《疯狂的站长》站长必读书籍
  5. Dreamweaver网页设计与制作100例:用DIV+CSS技术设计的书法主题网站(web前端网页制作课作业)
  6. Cozmo人工智能机器人SDK使用笔记(8)-应用部分apps
  7. 机器人跟踪_使用手机和机器学习跟踪睡眠
  8. 统计自然语言处理——信息论基础
  9. ETL工具kettle之Java脚本+Elasticsearch bulk insert
  10. Android系统签名生成