javaSocket与C通信
前段时间写了个web端与C服务端之间的通信不过用的是短连接 非堵塞的方式,一直想使用长连接,使tomcat启动的时候就和C服务端进行通信,但是一直没找到方法希望je的朋友能给点思路。先来看我现在的具体实现
通信的核心类
public
class
newsSockBase
{
private
SocketChannel sc;
private
final
int
MAX_LENGTH =
;
private
ByteBuffer r_buff ;
private
ByteBuffer w_buff ;
private
static
String host ;
private
static
int
port;
int
sendBufTotalLen;
int
sendBufLen;
int
sendBufStart;
byte
[] sendBuf;
int
recvBufTotalLen;
int
recvBufLen;
int
recvBufStart;
byte
[] recvBuf;
int
timeout;
String msg;
public
newsSockBase()
{
r_buff = ByteBuffer.allocate(MAX_LENGTH);
w_buff = ByteBuffer.allocate(MAX_LENGTH);
sendBufTotalLen = MAX_LENGTH;
sendBufLen = sendBufStart =
;
sendBuf =
new
byte
[MAX_LENGTH];
recvBufTotalLen = MAX_LENGTH;
recvBufLen = recvBufStart =
;
recvBuf =
new
byte
[MAX_LENGTH];
timeout =
;
}
public
void
setIPandPort(String str,
int
pt)
{
host = str;
port = pt;
}
//这两个函数一定要注意 形参是基类 而实际传入的参数是子类,到时候也是调用子类的参数来做
public
void
getBufFrompara(InewsDetail nD)
{
int
len = nD.encode(sendBuf, sendBufStart, sendBufTotalLen-sendBufStart-sendBufLen);
sendBufLen += len;
}
public
int
decodeBufToPara(InewsDetail nD)
{
int
len = nD.decode(recvBuf, recvBufStart, recvBufLen);
if
(len>
)
//解码正确的时候才做
{
recvBufLen -= len;
recvBufStart += len;
}
return
len;
}
public
void
start(InewsDetail nD)
{
//这里需要先根据传入的参数来
getBufFrompara(nD);
try
{
InetSocketAddress addr =
new
InetSocketAddress(host, port);
// 生成一个socketchannel
sc = SocketChannel.open();
sc.configureBlocking(
false
);
//
// 连接到server
sc.connect(addr);
while
(!sc.finishConnect())
;
System.out.println(
"connection has been established!…"
);
// while (true)
{
// 回射消息 // 复位,清空
w_buff.clear();
w_buff.put(sendBuf,sendBufStart,sendBufLen);
w_buff.flip();
// 转到最开始
// 发送消息
while
(w_buff.hasRemaining())
sc.write(w_buff);
w_buff.clear();
// 进入接收状态
while
(
true
)
{
int
ss=
;
int
count;
r_buff.clear();
while
(ss<timeout*
)
{
count = sc.read(r_buff);
if
(count>
)
break
;
ss++;
Thread.currentThread().sleep(
);
}
if
(ss==timeout)
{
break
;
}
r_buff.flip();
//判断recvBuf能不能放下接收到的数据
if
(r_buff.limit()+recvBufStart+recvBufLen>recvBufTotalLen)
{
//放不下了
//那就先看看前面是不是有空余
if
(recvBufStart>
)
{
for
(
int
i=
;i<recvBufStart;i++)
{
recvBuf
= recvBuf[i+recvBufStart];
}
recvBufStart = ;
}
)
);
nsb.start(nDNS);
System.out.println(]; ];
; ;
}
;
}
;;
)
hour -= ;
System.out.println(seq);
;
}
)
seq = ;
}
] = (+] = (]-)/+] = (]--(StreamID[]-)/+] = (]--(StreamID[]--(StreamID[]-+] = (+] = (]-)+] = (+] = (]-)+] = (+] = (]-)+] = (+] = (]-)+] = (+] = (]-)+] = (+] = (]-)+);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
javaSocket与C通信的更多相关文章
- JAVA-Socket通信笔记
JAVA - Socket 从开学到现在 也学了三个月时间的java了,一直在 在 语法和基本使用上周旋,井底之娃一枚. 这两天 有学长指点,花了两天的时间 学习了java多线程和socket的简单使 ...
- JAVA-Socket通信 打造属于自己的聊天室(服务端)
我们每天都在使用着微信.QQ等聊天软件,但不知你是否有想过这些聊天软件是如何实现的?是否想过要制作一个属于自己的聊天室? 本篇博客将带你打造一个简单的属于自己的聊天室,将cmd作为聊天窗口,可通过内网 ...
- Java-Socket通信 知识点记录
目录 一.Socket基本案例 二.消息通信 2.1 双向通信 2.2 告知发送结束 2.2.1 通过Socket关闭 2.2.2 通过Socket关闭输出流的方式 2.2.3 通过约定符号 2.2. ...
- Java--Socket通信(双向)
新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端两个工程的读写操作线程类基本上完全相同 服务端: import java.io.BufferedReader; import java.i ...
- JavaSocket简单通信
以下介绍:简单的socket发送消息,服务的Server 相互 客户端Client,进行简单的传递消息: 服务端代码: package test; import java.io.DataInputSt ...
- Flex通信-与Java实现Socket通信实例
Flex通信-与Java实现Socket通信实例 转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...
- Java与C之间的socket通信
最近正在开发一个基于指纹的音乐检索应用,算法部分已经完成,所以尝试做一个Android App.Android与服务器通信通常采用HTTP通信方式和Socket通信方式.由于对web服务器编程了解较少 ...
- Java NIO通信的基础,基于TCP C/S例子介绍
为了更好的理解Netty异步事件驱动网络通信框架,有必要先了解一点Java NIO原生的通信理论,下面将结合基于TCP的例子程序,含客户端和服务端的源码,实现了Echo流程. Java NIO的核心概 ...
- java中有关socket通信的学习笔记
最近做的项目中使用到了一些基于java的socket长连接的一些功能,用来穿透有关行业的网闸.用到了也就学习了一下,下面是对学习内容的一个笔记,记录一下也希望有兴趣的同学可以参考一下,加深对javas ...
随机推荐
- Codeforces 474A Keyboard (水
题目链接:点击打开链接 键盘移位了,问输出相应的字母 #include <cstdio> #include <cstring> char a[105]; char b[3][1 ...
- javascript6
eval("3+2")//5 eval():全局eval():严格eval() 函数和可执行的对象(callable object) delete一元操作符,善处对象属性或者数组元 ...
- CSS3实战开发: 纯CSS实现图片过滤分类显示特效
原文:CSS3实战开发: 纯CSS实现图片过滤分类显示特效 各位网友大家好,今天我要带领大家开发一个纯CSS的图片分类显示的网址导航,单纯看标题大家可能有些困惑,依照以往惯例,我先给大家演示一下实际运 ...
- 探讨css中repaint和reflow
(个人blog迁移文章.) 前言: 页面设计中,不可避免的需要浏览器进行repaint和reflow.那到底什么是repaint和reflow呢.下面谈谈自己对repaint和reflow的理解,以及 ...
- libvlc media player in C# (part 2)
原文 http://www.helyar.net/2009/libvlc-media-player-in-c-part-2/ I gave some simplified VLC media play ...
- html postMessage 创建聊天应用
应用说明: 这个例子演示如何在门户页面以iframe方式嵌入第三方插件,示例中使用了一个来域名下的应用部件,门户页面通过postMessage来通信.iframe中的聊天部件通过父页面标题内容的闪烁来 ...
- Asp.Net MVC页面静态化功能实现二:用递归算法来实现
上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net ...
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule和ResultFilter
由于公司现在所采用的是一套CMS内容管理系统的框架,所以最近项目中有一个需求提到要求实现页面静态化的功能.在网上查询了一些资料和文献,最后采用的是小尾鱼的池塘提供的 利用ResultFilter实现a ...
- mysql支持的数据类型及其测试
原文:mysql支持的数据类型及其测试 1.基础知识 1.1如何来查看mysql的帮助手册 ?int Help float; 1.2创建表的规则 CREATE TABLE [IF NOT EXISTS ...
- wcf的binding和host
----------------------------Binding绑定:定义:绑定表示通讯信道的配置:定义了客户端与服务端之间的协议:---传输协议:http.tcp.命名管道.msmq,自定义( ...