- 浏览: 216825 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (121)
- 投资杂记 (6)
- Java技术 (46)
- 记忆 (7)
- 科技随笔 (6)
- 随感 (8)
- 漫谈云计算 (4)
- 生活点滴 (1)
- andriod笔记 (13)
- mysql-数据库 (2)
- OSGI (1)
- Spring Data JPA (1)
- gradle maven nexus (1)
- Java性能优化 多核线程 优化 (2)
- Open-Erp (oe) (8)
- Java技术 camel (1)
- jetty camel dynamicRouter (1)
- karaf (1)
- amqp apollo camel karaf (1)
- Java技术 MyCat (1)
- Java技术 并行调用 线程池 (1)
最新评论
-
白云天:
主机网络端口使用命令: netstat -nplt
centos7.4上安装mysql5.7记录 -
白云天:
登录到 容器内部 docker ps -a查询容器IDsudo ...
docker初探 -
白云天:
export jars to local directory ...
Camel的direct,Bean测试 -
白云天:
location /esb/ { proxy_ ...
Camel的direct,Bean测试 -
白云天:
centos 中添加 shell_script.sh 为开机启 ...
Camel的direct,Bean测试
我在开发过程中自己写的程序代码,放这里供初学者大家参考,希望大家提出宝贵的意见:
package com.cc.pub;
import java.net.*;
import java.io.*;
/**
* Agent 、Client 的连接请求
*/
public class TcpConnector{
private static final int DEF_TIME_OUT=30000;//缺省的超时时间
private static final int DEF_WAT=32; //每次 sleep 时间(ms)
private int iMaxTime=0; //超时时间(ms);
private Socket socket; //连接
private java.io.DataInputStream in=null; //从 Socket 中取得的数据输入流
private java.io.DataOutputStream out=null; //从 Socket 中取得的数据输出流
private String ip=""; //IP 地址
private int iLocalPort=0;
private int iRemotePort=0;
public TcpConnector(Socket s){
setTimeOut(DEF_TIME_OUT); //30 s
socket=s;
init();
}
public Socket getSocket(){
return socket;
}
public String toString(){
if(socket==null){
return "Closed-Connect!";
}
return socket.toString();
}
public void setTimeOut(int i){
iMaxTime=i;
}
public int getTimeOut(){
return iMaxTime;
}
public int getLocalPort(){
return iLocalPort;
}
public int getRemotePort(){
return iRemotePort;
}
public boolean init(){
if(in!=null) return true;
boolean b=false;
try{
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
InetAddress ia=socket.getInetAddress();
ip = ia.getHostAddress();
iLocalPort=socket.getLocalPort();
iRemotePort=socket.getPort();
b=true;
}catch(Exception e){
e.printStackTrace();
}
return b;
}
public String getIP(){
return ip;
}
/**
* 取得可以从输入流读取的字节数
* 如果 -1 表示连接流出现问题
*/
synchronized public int available(){
if(socket==null){
return -1;
}
int iLen=-1;
try{
iLen=in.available();
}catch(Exception e){
//e.printStackTrace();
}
return iLen;
}
/**
* 从输入流读取指定字节长度的数据
* @param iLen 数据长度
* @return 读取的字节, 如为 null 表示读取过程可能发生异常
*/
public byte[] read(int iLen){
if(iLen<1) return null;
byte []b=new byte[iLen];
int iRead=read(b,0,iLen);
if(iRead<1) return null;
if(iRead<iLen){
byte []br=new byte[iRead];
System.arraycopy(b,0,br,0,iRead);
return br;
}
return b;
}
/**
* 从输入流读取指定字节长度的数据
* @param b 数据 buffer
* @param iFrom 存放数据起点
* @param iLen 读取数据长度
* @return >=0 取得的数据字节数, -1 错误
*/
synchronized public int read(byte []b,int iFrom,int iLen)
{
if(socket==null){
return -1;
}
if(b==null || iLen<1 || iFrom<0 || b.length<iFrom+iLen){
return 0;
}
int iGot=0;
int iRead=0;
int iTry=0;
try{
while( iRead<iLen && iGot>=0 && ( getTimeOut()>0 && iTry<getTimeOut() ) ){
if(available()<0){
break;
}
iGot=0;
if(available()>0){
iGot=in.read(b,iFrom+iRead,iLen-iRead);
if(iGot>0){
iRead+=iGot;
}
}
if(iGot==0){
try{
Thread.sleep(DEF_WAT);
iTry+=DEF_WAT;
}catch(Exception ee){}
}else{
iTry+=1;
}
}
return iRead;
}catch(Exception e){
e.printStackTrace();
}
return -1;
}
/**
* 写数据到输出流
* @param b 数据
* @param iFrom 起始位置
* @param iLen 数据长度
* @return 0 写成功, -1 失败, 1 参数错误
*/
synchronized public int write(byte[] b,int iFrom,int iLen){
if(socket==null){
System.out.print("---------null scoket--------");
return -1;
}
try{
if(b!=null && iFrom>=0 && iFrom+iLen<=b.length){
out.write(b,iFrom,iLen);
out.flush();
return 0;
}else{
return 1;
}
}catch(Exception e){
e.printStackTrace();
}
return -1;
}
/**
* 写数据到输出流
*/
public int write(byte[] b){
return write(b,0,b.length);
}
public void close(){
try{
in.close();
}catch(Exception e){
//e.printStackTrace();
}
try{
out.close();
}catch(Exception e){
//e.printStackTrace();
}
try{
socket.close();
}catch(Exception e){
//e.printStackTrace();
}
socket=null;
}
}
有了上面的类,那么通讯会变得简单些,如:
Socket s=new Scoket(ip,port);
TcpConnector t=new TcpConnector();
byte []b="hello".getBytes();
t.write(b,0,b.length);
int len=t.read(b,0,1);//读取1个字节
//在读的方法中如果读不到数据,程序会 sleep 后再读,尽量的读到延时的数据,如果有更好的办法,请留言,谢谢!
package com.cc.pub;
import java.net.*;
import java.io.*;
/**
* Agent 、Client 的连接请求
*/
public class TcpConnector{
private static final int DEF_TIME_OUT=30000;//缺省的超时时间
private static final int DEF_WAT=32; //每次 sleep 时间(ms)
private int iMaxTime=0; //超时时间(ms);
private Socket socket; //连接
private java.io.DataInputStream in=null; //从 Socket 中取得的数据输入流
private java.io.DataOutputStream out=null; //从 Socket 中取得的数据输出流
private String ip=""; //IP 地址
private int iLocalPort=0;
private int iRemotePort=0;
public TcpConnector(Socket s){
setTimeOut(DEF_TIME_OUT); //30 s
socket=s;
init();
}
public Socket getSocket(){
return socket;
}
public String toString(){
if(socket==null){
return "Closed-Connect!";
}
return socket.toString();
}
public void setTimeOut(int i){
iMaxTime=i;
}
public int getTimeOut(){
return iMaxTime;
}
public int getLocalPort(){
return iLocalPort;
}
public int getRemotePort(){
return iRemotePort;
}
public boolean init(){
if(in!=null) return true;
boolean b=false;
try{
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
InetAddress ia=socket.getInetAddress();
ip = ia.getHostAddress();
iLocalPort=socket.getLocalPort();
iRemotePort=socket.getPort();
b=true;
}catch(Exception e){
e.printStackTrace();
}
return b;
}
public String getIP(){
return ip;
}
/**
* 取得可以从输入流读取的字节数
* 如果 -1 表示连接流出现问题
*/
synchronized public int available(){
if(socket==null){
return -1;
}
int iLen=-1;
try{
iLen=in.available();
}catch(Exception e){
//e.printStackTrace();
}
return iLen;
}
/**
* 从输入流读取指定字节长度的数据
* @param iLen 数据长度
* @return 读取的字节, 如为 null 表示读取过程可能发生异常
*/
public byte[] read(int iLen){
if(iLen<1) return null;
byte []b=new byte[iLen];
int iRead=read(b,0,iLen);
if(iRead<1) return null;
if(iRead<iLen){
byte []br=new byte[iRead];
System.arraycopy(b,0,br,0,iRead);
return br;
}
return b;
}
/**
* 从输入流读取指定字节长度的数据
* @param b 数据 buffer
* @param iFrom 存放数据起点
* @param iLen 读取数据长度
* @return >=0 取得的数据字节数, -1 错误
*/
synchronized public int read(byte []b,int iFrom,int iLen)
{
if(socket==null){
return -1;
}
if(b==null || iLen<1 || iFrom<0 || b.length<iFrom+iLen){
return 0;
}
int iGot=0;
int iRead=0;
int iTry=0;
try{
while( iRead<iLen && iGot>=0 && ( getTimeOut()>0 && iTry<getTimeOut() ) ){
if(available()<0){
break;
}
iGot=0;
if(available()>0){
iGot=in.read(b,iFrom+iRead,iLen-iRead);
if(iGot>0){
iRead+=iGot;
}
}
if(iGot==0){
try{
Thread.sleep(DEF_WAT);
iTry+=DEF_WAT;
}catch(Exception ee){}
}else{
iTry+=1;
}
}
return iRead;
}catch(Exception e){
e.printStackTrace();
}
return -1;
}
/**
* 写数据到输出流
* @param b 数据
* @param iFrom 起始位置
* @param iLen 数据长度
* @return 0 写成功, -1 失败, 1 参数错误
*/
synchronized public int write(byte[] b,int iFrom,int iLen){
if(socket==null){
System.out.print("---------null scoket--------");
return -1;
}
try{
if(b!=null && iFrom>=0 && iFrom+iLen<=b.length){
out.write(b,iFrom,iLen);
out.flush();
return 0;
}else{
return 1;
}
}catch(Exception e){
e.printStackTrace();
}
return -1;
}
/**
* 写数据到输出流
*/
public int write(byte[] b){
return write(b,0,b.length);
}
public void close(){
try{
in.close();
}catch(Exception e){
//e.printStackTrace();
}
try{
out.close();
}catch(Exception e){
//e.printStackTrace();
}
try{
socket.close();
}catch(Exception e){
//e.printStackTrace();
}
socket=null;
}
}
有了上面的类,那么通讯会变得简单些,如:
Socket s=new Scoket(ip,port);
TcpConnector t=new TcpConnector();
byte []b="hello".getBytes();
t.write(b,0,b.length);
int len=t.read(b,0,1);//读取1个字节
//在读的方法中如果读不到数据,程序会 sleep 后再读,尽量的读到延时的数据,如果有更好的办法,请留言,谢谢!
发表评论
-
docker初探
2017-08-17 16:49 6231、docker , 先从仓库中下载一个和自己的 ... -
java-nio的hello-word
2017-04-27 17:55 504重点注意:有说明的地 ... -
Java NIO 系列教程
2015-07-02 14:28 885Java NIO提供了与标准IO不同的IO工作方式: ... -
随手记录-设计目录中的jar到类路径
2015-05-07 18:01 791@echo off color 7 SetLocal Enab ... -
gradle和maven结合nexus服务解决jar包依赖
2014-07-17 11:00 16361、架设 nexus nexus 的基础不多讲了,去官网下载 ... -
利用注解定义SQL语句,实现类是iBatis的数据库访问
2014-06-25 18:04 3541import java.lang.annotation.*; ... -
使用 Spring Data JPA 简化 JPA 开发(Spring Data JPA 开发指南)
2014-06-11 15:46 710从一个简单的 JPA 示例开始 本文主要讲述 Spring D ... -
My-sql批量更新或者插入的SQL
2013-09-25 17:03 1386My-sql批量更新或者插入的SQL,高效, MyBatis中 ... -
加减的艺术用于工作学习管理
2013-02-17 17:12 746回顾做过的事情,总结起来,就是先加,后减,再加。 不是吗? ... -
记录到内存的Logger,可用于web动态显示内容的来源
2013-02-17 09:35 1835import java.io.ByteArrayOutputS ... -
一个表达式计算工具
2012-11-21 12:57 783可以计算: 加减乘除,余数,括号 , 结果为整数,操作数全部为 ... -
ms-sql-server获取某表的当前可用的自增值
2012-01-10 09:46 920执行 SQL : select IDENT_CURRENT( ... -
一个加密数字和逗号且减少空间的算法
2010-11-09 17:19 1337注意本算法只能处理由 0,1,2,3,4,5,6,7,8, ... -
云计算笔记
2010-09-01 14:13 809最近得闲,去了解下 hadoop系统,下面为过程记录: 1、 ... -
在MySql上实现Replication(Master 与 Slave 数据同步)
2010-04-23 17:54 1149假设这里有三个数据库分别为 d1、d2、d3,其中d ... -
在一台windows机器上如何安装多个Mysql
2010-04-23 17:41 34161、将mysql程序直接拷贝到某个目录(假设目录为d:\mys ... -
MySQL复制配置步骤文档(主从备份机制)
2010-03-30 10:14 1880本文档主要对一个主服务器,一个从服务器(简称一主一从)的复制配 ... -
如何得到SqlServer的自增ID
2010-03-16 11:09 5958转自:http://hi.baidu.com/vc60/blo ... -
J2EE集群
2010-01-04 15:29 3633对于理解J2EE集群技术不 ... -
JDBC 调用存储过程的整理
2010-01-04 14:30 1054String sqls = this.getSqls().ge ...
相关推荐
创建这样一个简易的Socket通讯工具,可以帮助开发者更好地理解网络通信过程,同时也可以作为实际项目开发中的基础模块。在实践中,还需要考虑更多的因素,比如多线程处理、错误恢复机制、数据编码解码等,以提升通信...
这个封装过的C# Socket通讯类对于开发者来说,是一个宝贵的工具,它能够简化网络编程,提高开发效率,同时保持代码的可读性和可维护性。通过理解这些关键知识点,开发者可以更好地利用此类库,快速构建出可靠的网络...
在`CSharpPort`文件中,可能会有一个名为`SerialPortDemo`的项目或类,展示了如何配置串口参数(如波特率、数据位、停止位和校验位)并实现数据的发送与接收。 接下来,我们讨论Socket通讯。Socket是网络编程的基本...
一个Socket实例可以作为服务器端,监听来自客户端的连接请求,或者作为客户端,向服务器发起连接。 在"Chat_Demo_Server"项目中,你会看到服务器端的实现。服务器通常需要执行以下步骤: 1. 创建一个Socket实例,并...
本示例提供了一个完整的C# Socket通讯/TCP通讯的代码demo,旨在帮助开发者理解和应用网络通信技术。 首先,我们要理解Socket的基本概念。Socket在计算机网络中扮演着桥梁的角色,它允许两台计算机通过网络进行数据...
总之,这个C# Socket通讯框架为开发者提供了一个便利的工具,通过封装的类库和实例演示,降低了网络编程的门槛。无论是初学者还是有经验的开发者,都能从中获益,快速构建起可靠的网络通信系统。记得仔细研究提供的...
本篇文章将深入探讨C#中的Socket通信,并基于提供的标题和描述,解析一个简单的C# Socket通信实例。 首先,让我们了解Socket的基本概念。Socket是操作系统提供的接口,允许应用程序通过网络进行数据传输。在网络层...
1. **实时捕获**:实时监控网络中的Socket通信,记录每一个进出的数据包。 2. **协议解析**:支持多种网络协议,如TCP、UDP等,能详细解析数据包的头部信息和负载内容。 3. **过滤和筛选**:通过设定规则,只显示...
**BCB Socket通讯实例详解** BCB,全称Borland C++ Builder,是一款由Borland公司开发的集成开发环境(IDE),它基于C++语言,并提供了丰富的VCL(Visual Component Library)组件库,使得开发者能够快速构建图形...
Socket通讯调试工具是一种重要的开发和测试工具,尤其在进行网络编程时,无论是TCP还是UDP协议,都有着不可或缺的作用。本文将详细介绍此类工具的功能、用途以及如何使用它们来优化和调试网络应用。 首先,Socket是...
在这个名为“简易Socket聊天工具”的项目中,我们可以通过Socket来构建一个简单的聊天环境,让客户端和服务器之间,以及客户端与客户端之间能够进行实时的信息交换。下面将详细介绍Socket通信的基础知识以及在聊天...
Socket通讯包是一个重要的编程工具,主要用于在客户端和服务器之间建立网络通信。Socket是TCP/IP协议族的一部分,提供了进程间通信(IPC)的能力,允许不同计算机上的应用程序通过网络进行数据交换。在本文中,我们...
Socket通讯框架是网络编程中的重要组成部分,特别是在C#开发中,它为开发者提供了低级别的网络通信接口,可以实现客户端与服务器之间的数据交换。本示例着重于如何利用Socket进行大文件传输、分页分包处理以及在高...
本教程将深入讲解如何利用C#开发一个通用的Socket测试工具,涵盖TCP和UDP协议,同时也提供了源代码供学习和参考。 首先,我们要理解TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)的基本...
在IT行业中,GPS定位器与后台系统的通讯是一个重要的应用场景,特别是在物联网(IoT)领域。本文将详细讨论“卫通星GPS定位器GT06”如何通过Socket通讯协议与Java Spring Boot应用程序进行对接,以及涉及的技术点。 ...
通过以上步骤,你可以在Delphi中实现一个基本的文件传输系统,而文件名称列表(socket)可能代表了实际项目中多个文件的传输需求。在实际应用中,你可能需要对这个基础进行扩展,例如支持多文件传输、进度显示、断点...
总结来说,C#的TCP异步SOCKET通讯类是开发网络应用程序的重要工具,通过利用异步编程和事件驱动,可以在不牺牲用户体验的情况下处理大量的网络请求。`TCPIPDemo`项目提供了一个实践平台,可以帮助开发者更好地理解和...
在本示例中,"flex C# 基于socket 通讯 应用程序源码"描述了一个项目,该项目结合了这两种技术,通过Socket通信实现客户端和服务器端的数据交互。 Socket通信是网络编程的基础,它允许两个网络应用程序之间建立连接...
在实际应用中,我们通常会封装一个Socket通信的工具类,包含发送和接收数据的方法。例如,可以定义一个`send()`方法用于发送字符串数据,一个`recv()`方法用于接收服务器返回的字符串数据。为了保证数据的完整性和...
总的来说,这个"C#_socket_实时通讯框架"是一个为开发者提供便捷、稳定的TCP长连接通讯能力的工具,它简化了底层网络编程的复杂性,使开发者能够更加专注于业务逻辑的实现。通过学习和使用这个框架,可以提升开发...