Socket -tcp/ip

public class SocketUtil {

private final LogManager LOGGER=new LogManager("SocketUtil");

private final int CON_TIMEOUT = 1000*20; //连接超时时长

private String host;  //主机

private int port;     //端口

private Socket socket=null;

private InetSocketAddress isa = null;

private DataInputStream dis=null;

private DataOutputStream dos=null;

private TimeoutThread timeoutThread = null;

private boolean timeout = false;

public void setHostPort(String host,int port){

close();

this.host = host;

this.port = port;

}

/**

* 发送请求,并返回请求结果

* @param message

*/

public synchronized String write(String message){

String result="网络异常!";

try {

byte buf[]=new byte[message.length()/2];//16进制发送

int offset=0;

LOGGER.debug("message:"+message);

for (int i=0;i<message.length()/2;i++) {    //把16进制字符串转换成byte数组

offset=i*2;

String contentStr = message.substring(offset,offset+2);

String intStr = String.valueOf(Integer.parseInt(contentStr,16));

buf[i]=(byte)(Integer.parseInt(intStr)&0xFF);

}

if(socket==null){

create();

}

if(socket.isConnected()==false){

LOGGER.error("======= Recreate Socket =========");

close();

create();

}

LOGGER.error("======= send req date =========");

dos.write(buf);

dos.flush();

result = read();

}catch(Exception e){

e.printStackTrace();

close();

}

return result;

}

private String read(){

timeout = false;

int size =0;

String msg = null;

timeoutThread = new TimeoutThread();

timeoutThread.start();

while(timeout==false&&size==0){

try{

size=dis.available();

//LOGGER.debug("read size>>>>>>"+size+"timeout="+timeout);

if(size>0){

byte[] buffer = new byte[size];

dis.read(buffer);

msg=DataUtil.bytesToHexString(buffer).toUpperCase();

LOGGER.debug("msg:"+msg);

}

}catch(IOException ioe){

LOGGER.debug("数据接收异常!!");

break;

}

}

if(timeoutThread!=null){

timeoutThread.interrupt();

timeoutThread=null;

}

return msg;

}

/**

* 创建连接

* @return

*/

private String create(){

try{

//LOGGER.info("Connecting... host:"+host+",port:"+port);

socket = new Socket();

isa = new InetSocketAddress(host,port);

socket.connect(isa,CON_TIMEOUT);

socket.setKeepAlive(true);

//获取Socket输入输出流进行读写操作

dis = new DataInputStream(socket.getInputStream());

dos = new DataOutputStream(socket.getOutputStream());

LOGGER.debug("Connect address:"+socket.getRemoteSocketAddress().toString());

LOGGER.info("========= Connect is OK ========");

return "OK";

}catch(Exception e){

LOGGER.error("========= Connect is failed!=========");

e.printStackTrace();

close();

return "网络异常!";

}

}

/**

* 关闭连接

*/

private void close(){

try{

//关闭写入流

if(dis!=null){

dis.close();

dis=null;

}

//关闭写出流

if(dos!=null){

dos.close();

dos=null;

}

//关闭socket

if(socket!=null){

socket.close();

socket=null;

}

}catch(Exception e){

e.printStackTrace();

}

}

/**

* 超时处理线程

* @author yxj

*

*/

public class TimeoutThread extends Thread{

public void run() {

int delayms = 20*1000;

while(delayms>0){

try{

delayms = delayms-100;

sleep(100);

}catch(Exception e){

e.printStackTrace();

}

}

if(delayms<=0){

timeout=true;

}

}

}

}

/*

应用 例子

new Thread(){

@Override

public void run() {

SocketUtil socket = IparkApplication.getSocket();

if(socket==null){

socket= new SocketUtil();

socket.setHostPort(IparkApplication.getHostPort().getHost(), IparkApplication.getHostPort().getPort());

IparkApplication.setSocket(socket);

}

String rspStr = socket.write(reqMsg);//写书数据  里面 包含了Soclet的链接

if(rspStr==null||rspStr.equals("网络异常!")){

handler.sendEmptyMessage(NET_ERR);

}else{

//解析数据

resulteBerthPo = new GetBerthsResultPo();

CommonDecoderr cDecoder = new CommonDecoderr();

cDecoder.decode(rspStr);

String subContent=cDecoder.getSubPackege();

LOGGER.debug("subCotent:"+subContent);

if(subContent!=null){

GetBerthsDecoder.decode(resulteBerthPo, subContent);

LOGGER.debug("berths---"+resulteBerthPo.toString());

handler.sendEmptyMessage(GET_BERTH_SUCESS);

}else{

handler.sendEmptyMessage(GET_BERTH_FAIL);

}

}

}

}.start();

*/

时间: 2024-11-02 22:13:22

Socket -tcp/ip的相关文章

iOS中 HTTP/Socket/TCP/IP通信协议详解

// OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. 物理层 // TCP/IP, 由美国国防部制定 // 1. 应用层, HTTP, FTP, SMTP, DNS // 2. 传输层, TCP, UDP // 3. 网络层, IP // 4. 链路层, ARP, RARP // HTTP(短连接) // 1. 建立链接, 三次握手 // 2. 断开

iOS中 HTTP/Socket/TCP/IP通信协议具体解释 韩俊强的博客

简介: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. 物理层 // TCP/IP, 由美国国防部制定 // 1. 应用层, HTTP, FTP, SMTP, DNS // 2. 传输层, TCP, UDP // 3. 网络层, IP // 4. 链路层, ARP, RARP // HTTP(短连接) // 1. 建立链接, 三次握手 // 2

iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. 物理层 // TCP/IP, 由美国国防部制定 // 1. 应用层, HTTP, FTP, SMTP, DNS // 2. 传输层, TCP, UDP // 3. 网络层, IP // 4. 链路层,

socket,TCP/IP的理解

TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准, 从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族.不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中 应用层:TFTP,HTTP

android 网络编程--socket tcp/ip udp http之间的关系

网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,一般编程人员接触最多的就是应用层和运输层,再往下的就是所谓的媒体层了,不是我们研究的对象. 下面是应用层.运输层,网络层.链路层通信协议概图.我们经常接触到的一般是: http协议:应用层协议,并且http协议是基于tcp连接的,主要解决的是如何包装协议的 tcp协议:运输层协议,通常也叫做tcp/ip协议,主要解决数据如何在网络中传输 udp协议:运输层协议,用户数据报协议,不可靠的协议,只负责把应用层的协议的数

Android 手机应用开发经验 之 通过Socket(TCP/IP)与PC通讯

Android 是一个开源的手机操作系统平台,已经被非常多的开发者视作未来最有潜力的智能手机操作系统.而且,在很短的时间内就在Android Market上出现大量的第三方应用程序,供用户下载与使用,其中有一些程序增强了手机的应用功能,而另外一些会充分的发挥 手机与其它电子设备的互动.今天,本文主要讲解如何实现Android与PC通讯. 首先,我们先来创建PC的服务器端,其源代码如下: public class TCPDesktopServer implements Runnable { pub

socket tcp/ip 之简单ssh协议

看了python核心编程和大牛的视频之后,自己动手也试了一试,写写笔记,加深一下印象 首先服务端要导入socket模块,然后绑定地址和端口,并监听,然后进入等待接收来自客户端请求的一个循环,如果有数据来连接,则接收数据,整理后把请求的数据发给客户端. 客户端则也是导入socket模块,连接地址和端口,然后是一个发送请求的循环,然后接收来自服务器的信息. 所有的数据的发送与接收都是采用字节类型,而不是字符串,所以要用encode编码. 实现计算机内部命令的接收与发送,如果输入的命令有误,则给出提示

TCP/IP,Http,Socket,XMPP的区别

大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用(程序员层面上).也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍: “我们在传输数据时

【DAY18】Socket编程,ROSE建模与TCP/IP的学习笔记

IDE eclipse调试 ------------------ 1.Debug 2.Step into : F5  ,单步进入. 3.Step return : F7,单步返回. 4.Stop over : F6,单步跳过. 安装Rose建模软件 ----------------- 1.安装虚拟光驱软件:DTLite.exe 2.加载Rose镜像文件. 3.一路安装,next... 4.安装完成注册License. a.在license管理器界面 开始 --> IBM Rose -> Lic