转载一个“socket长连接的实例”
import java.io.IOException;
import java.net.Socket;
import java.net.ServerSocket;
import com.omn.xmpp.server.util.Logger;
public class SocketAcceptThread extends Thread{
/**
* 默认的监听端口
*/
public static final int DEFAULT_PORT = 5222;
/**
* 代表监听端口
*/
private int serverPort;
/**
* true表示线程没有停止,继续运行
*/
private boolean notTerminated=true;
/**
*记录对象
*/
private Logger log;
/**
* 监听服务
*/
private ServerSocket serverSocket;
public SocketAcceptThread(Logger l,int port){
init(l,port);
}
public SocketAcceptThread(Logger l){
init(l,SocketAcceptThread.DEFAULT_PORT);
}
/**
* 初始化
* @param l
* @param port
*/
public void init(Logger l,int port){
this.log=l;
this.serverPort=port;
try {
this.serverSocket=new ServerSocket(serverPort);
} catch (IOException e) {
log.fatalError("SocketAcceptThread:serversocket初始化失败!!");
}
}
/**
* 运行端口监听 一旦监听到进一步处理后继续去监听
*/
public void run() {
try {
while (notTerminated) {
Socket sock = serverSocket.accept();
if (sock != null) {
//这里添加处理
try{
System.out.println("SocketAcceptThread:创建了一个connection");
new Connection(sock);//创建了connection
}catch(IOException e){
log.error("SocketAcceptThread:建立连接错误"+e.getMessage());
}
}
}
}
catch (IOException ie) {
if (notTerminated) {
log.error("SocketAcceptThread:socket建立错误"+ie.getMessage());
}
}
catch (Exception e) {
log.error("SocketAcceptThread:socket监听错误"+e.getStackTrace());
}
try {//无论如何也要关闭
ServerSocket sSock = serverSocket;
serverSocket = null;
if (sSock != null) {
sSock.close();
}
}
catch (IOException e) {
// 关闭不上就不管了
}
}
/**
* 关闭监听.
*/
public void shutdown() {
notTerminated = false;
try {
ServerSocket sSock = serverSocket;
serverSocket = null;
if (sSock != null) {
sSock.close();
}
}
catch (IOException e) {
// 在关闭不了就不管了
}
}
}
import java.io.IOException;
import java.net.Socket;
import java.net.ServerSocket;
import com.omn.xmpp.server.util.Logger;
public class SocketAcceptThread extends Thread{
/**
* 默认的监听端口
*/
public static final int DEFAULT_PORT = 5222;
/**
* 代表监听端口
*/
private int serverPort;
/**
* true表示线程没有停止,继续运行
*/
private boolean notTerminated=true;
/**
*记录对象
*/
private Logger log;
/**
* 监听服务
*/
private ServerSocket serverSocket;
public SocketAcceptThread(Logger l,int port){
init(l,port);
}
public SocketAcceptThread(Logger l){
init(l,SocketAcceptThread.DEFAULT_PORT);
}
/**
* 初始化
* @param l
* @param port
*/
public void init(Logger l,int port){
this.log=l;
this.serverPort=port;
try {
this.serverSocket=new ServerSocket(serverPort);
} catch (IOException e) {
log.fatalError("SocketAcceptThread:serversocket初始化失败!!");
}
}
/**
* 运行端口监听 一旦监听到进一步处理后继续去监听
*/
public void run() {
try {
while (notTerminated) {
Socket sock = serverSocket.accept();
if (sock != null) {
//这里添加处理
try{
System.out.println("SocketAcceptThread:创建了一个connection");
new Connection(sock);//创建了connection
}catch(IOException e){
log.error("SocketAcceptThread:建立连接错误"+e.getMessage());
}
}
}
}
catch (IOException ie) {
if (notTerminated) {
log.error("SocketAcceptThread:socket建立错误"+ie.getMessage());
}
}
catch (Exception e) {
log.error("SocketAcceptThread:socket监听错误"+e.getStackTrace());
}
try {//无论如何也要关闭
ServerSocket sSock = serverSocket;
serverSocket = null;
if (sSock != null) {
sSock.close();
}
}
catch (IOException e) {
// 关闭不上就不管了
}
}
/**
* 关闭监听.
*/
public void shutdown() {
notTerminated = false;
try {
ServerSocket sSock = serverSocket;
serverSocket = null;
if (sSock != null) {
sSock.close();
}
}
catch (IOException e) {
// 在关闭不了就不管了
}
}
}
解决方案 »
- 什么书讲web service和java比较好的
- 上传tomcat服务器运行不了
- java/jsp/j2ee/ejb/webservice/dwr qq群42503189 功能强大,牛人多,名额有限,从速加入。
- spring+quartz实现任务调度时,抛出奇怪异常
- EJB3中@PersistenceContext具体是如何注入EntityManager的?
- OSCACHE 局部缓存
- 在windows2003server中安装Tomcat5.0.18不成功!
- 关于32位系统与64位系统的问题。急!急!急!急!急!
- tomcat 与 resin 兼容问题
- WebLogic7.0用了一段时间,启动出错!
- 请帮我看下这几个是什么版本的hibernate
- 电信wap 定购/使用通知接口的WEBSERVICE接口
这是一个客户端http请求头中的值,告诉服务器,客户端的这个请求要保持持续连接。
这样当客户端的socket连接到服务端,服务端处理完后并不主动关闭socket 。保持常连接可以减少客户端向服务器端发送http请求的次数也就是减少tcp三次握手的时间,但是服务器为保存socket需要消耗一些资源。