java Socket 客户端实践
来源:互联网 发布:spring ioc 源码分析 编辑:程序博客网 时间:2024/05/18 14:25
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class SocketClient {
protected final static Log log = LogFactory.getLog(SocketClient.class);
private static final int RECEIVE_BUFFER_SIZE = 102400;
private Socket clientSocket = null;
private String host = "127.0.0.1";
private int port = 6600;
private BufferedInputStream in;
private BufferedOutputStream out;
@SuppressWarnings("unused")
private String charset = "gbk";
public SocketClient(String host, int port) {
this.host = host;
this.port = port;
}
/**
*
* 发送信息
*
* @param bData
* name 线程名
*/
public void send(byte[] bData, String name) {
try {
log.debug("线程:" + name + " send data..... ");
out.write(bData);
out.flush();
} catch (Throwable ex) {
throw new RuntimeException(ex);
}
}
/**
* 建立SOCKET连接
* name 线程名
* @throws Throwable
* @throws IOException
* @throws UnknownHostException
* @throws IOException
* @throws UnknownHostException
*/
public void openSocket(String name) {
try {
log.debug("线程:" + name + " 主机:" + host + ";端口:" + port + " 建立连接");
clientSocket = new Socket(host, port);
in = new BufferedInputStream(clientSocket.getInputStream());
out = new BufferedOutputStream(clientSocket.getOutputStream());
} catch (Throwable e) {
throw new RuntimeException("线程:" + name + " 主机:" + host + ";端口:" + port + " 异常。 ", e);
}
}
/**
*
* 发送信息
*
* @param bData
*
*/
public void send(byte[] bData) {
try {
out.write(bData);
out.flush();
} catch (Throwable ex) {
throw new RuntimeException(ex);
}
}
/**
* 建立SOCKET连接
* name 线程名
*/
public void openSocket() {
try {
log.debug(" 主机:" + host + ";端口:" + port + " 建立连接");
clientSocket = new Socket(host, port);
in = new BufferedInputStream(clientSocket.getInputStream());
out = new BufferedOutputStream(clientSocket.getOutputStream());
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
/**
* 断开SOCKET连接
*/
public void closeSocket() {
if (clientSocket != null) {
try {
log.debug("close socket");
clientSocket.close();
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
clientSocket = null;
}
/**
* name 线程名称
*
* 断开SOCKET连接
*/
public void closeSocket(String name) {
if (clientSocket != null) {
try {
log.debug("线程:" + name + "close socket");
clientSocket.close();
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
clientSocket = null;
}
/**
* 读取回传信息
*
* @return
* @throws Exception
* @throws SocketException
*/
public byte[] receive() throws Exception, SocketException {
byte rsp[] = new byte[RECEIVE_BUFFER_SIZE];
int iIndex = 0;
if ((clientSocket == null) || (in == null)) {
log.debug("套接口无效,无法读取数据");
log.error("套接口无效,无法读取数据");
throw new SocketException("套接口无效,无法读取数据");
}
int iTimeoutTimes = 600;
int iAvailable = 0;
while (true) {
iAvailable = in.available();
if (iAvailable != 0) {
for (int i = 0; i < iAvailable; i++) {
int temp_data = in.read();
if (temp_data != -1) {
rsp[iIndex + 0] = (byte) (temp_data & 0x0ff);
iIndex++;
if (iIndex >= RECEIVE_BUFFER_SIZE) {
log.debug("缓冲区长度过小,无法继续接收CM返回结果!");
log.error("缓冲区长度过小,无法继续接收CM返回结果!");
throw new RuntimeException("缓冲区长度过小,无法继续接收CM返回结果!");
}
}
}
break;
}
Thread.sleep(200);
iTimeoutTimes--;
if (clientSocket == null)
break;
}
byte[] result = new byte[iIndex];
for (int i = 0; i < iIndex; i++) {
result[i] = rsp[i];
}
return result;
}
}
- java Socket 客户端实践
- java - socket通信 客户端
- java socket客户端访问服务器端
- Socket-Java-客户端相关知识
- Java Socket多线程服务端、客户端
- Java Socket多线程服务端、客户端
- java Socket客户端和服务器端
- JAVA SOCKET 实现 FTP 客户端
- java socket 实现FTP客户端
- java socket客户端连接池
- 4、java socket TCP 客户端
- 8、java socket UDP 客户端
- Java socket 客户端接受数据
- Java网络编程 客户端Socket
- iOS网络编程实践--NSStream实现TCP Socket iPhone客户端
- iOS 网络编程实践--NSStream实现TCP Socket iPhone客户端
- iOS 网络编程实践--NSStream实现TCP Socket iPhone客户端 .
- iOS网络编程实践--NSStream实现TCP Socket iPhone客户端
- XPath语法 在C#中使用XPath示例
- android高级界面组件之AutoCompleteTextView
- 光学式运动捕捉
- 网页设计相关资料
- android 入门基础 关于工程下的资源类型资料
- java Socket 客户端实践
- 网线水晶头接法-详细的网线制作
- 如果出现The content of element type "package" must match "(result-types?,interceptors?,default-interce
- 集成libevent,google protobuf的RPC框架
- DirectX历史
- Python ide 比较
- 创建webx框架的web应用工程
- d3dx9库函数
- AspxGridView 排序之后 e.CommandArgs.CommandArgument.ToString() 获得ID缓存