1.SocketServer等待客户端连接
package com.hiaward.xtranssvc.socket;import java.io.BufferedReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;public class SocketServer extends HttpServlet { final static int PORT = 8765;
public void init() throws ServletException {
Thread t = new Thread(new Runnable() {
ServerSocket server = null;
public void run() {
BufferedReader in = null;
PrintWriter out = null;
try {
server = new ServerSocket(PORT);
Socket socket = null;
HandlerExecutorPool executorPool = new HandlerExecutorPool(50, 1000);
try {
while(true){
socket = server.accept();
executorPool.execute(new ServerHandler(socket));
}
} catch (Exception ex) {
System.out.println("---"+ex);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("---"+e);
} finally {
if(in != null){
try {
in.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if(out != null){
try {
out.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(server != null){
try {
server.close();
} catch (Exception e3) {
e3.printStackTrace();
}
}
server = null;
}
}
});
t.start();
}
}
2.客户端连接后,进行处理,能接收到请求,但是消息必须要客户端断开后才能收到消息
package com.hiaward.xtranssvc.socket;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;import com.hiaward.xtranssvc.database.TermDb;
import com.hiaward.xtranssvc.entity.Term;
import com.hiaward.xtranssvc.socket.SocketToTerm;
public class ServerHandler implements Runnable { private Socket socket;
public ServerHandler (Socket socket){
this.socket = socket;
}
public void run() {
System.out.println("run");
BufferedReader in = null;
PrintWriter out = null;
try {
in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
out = new PrintWriter(this.socket.getOutputStream(), true);
String body = null;
while(true){
System.out.println("body = in.readLine()前");
body = in.readLine();
System.out.println("body = in.readLine()后body=" + body);
if(body == null){
System.out.println("null" );
break;
}
//将信息在页面显示
out.print("1");
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(in != null){
try {
in.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if(out != null){
try {
out.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(socket != null){
try {
socket.close();
} catch (Exception e3) {
e3.printStackTrace();
}
}
socket = null;
}
}}
求大神看看
package com.hiaward.xtranssvc.socket;import java.io.BufferedReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;public class SocketServer extends HttpServlet { final static int PORT = 8765;
public void init() throws ServletException {
Thread t = new Thread(new Runnable() {
ServerSocket server = null;
public void run() {
BufferedReader in = null;
PrintWriter out = null;
try {
server = new ServerSocket(PORT);
Socket socket = null;
HandlerExecutorPool executorPool = new HandlerExecutorPool(50, 1000);
try {
while(true){
socket = server.accept();
executorPool.execute(new ServerHandler(socket));
}
} catch (Exception ex) {
System.out.println("---"+ex);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("---"+e);
} finally {
if(in != null){
try {
in.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if(out != null){
try {
out.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(server != null){
try {
server.close();
} catch (Exception e3) {
e3.printStackTrace();
}
}
server = null;
}
}
});
t.start();
}
}
2.客户端连接后,进行处理,能接收到请求,但是消息必须要客户端断开后才能收到消息
package com.hiaward.xtranssvc.socket;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;import com.hiaward.xtranssvc.database.TermDb;
import com.hiaward.xtranssvc.entity.Term;
import com.hiaward.xtranssvc.socket.SocketToTerm;
public class ServerHandler implements Runnable { private Socket socket;
public ServerHandler (Socket socket){
this.socket = socket;
}
public void run() {
System.out.println("run");
BufferedReader in = null;
PrintWriter out = null;
try {
in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
out = new PrintWriter(this.socket.getOutputStream(), true);
String body = null;
while(true){
System.out.println("body = in.readLine()前");
body = in.readLine();
System.out.println("body = in.readLine()后body=" + body);
if(body == null){
System.out.println("null" );
break;
}
//将信息在页面显示
out.print("1");
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(in != null){
try {
in.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if(out != null){
try {
out.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(socket != null){
try {
socket.close();
} catch (Exception e3) {
e3.printStackTrace();
}
}
socket = null;
}
}}
求大神看看
解决方案 »
- 急!JFileChooser不在首层显示的问题
- java I/O的问题
- 菜鸟学习juint,救助!!
- 如此错误:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- 请教shark初始化配置及载入xpdl代码
- 谁有 JAVA2 API 大全的电子文档下载地址
- 项目开发中的步骤,需要的资料以及需要的技术问题。
- Lucene4.0+索引的效率问题
- FileSystemXmlApplicationContext找不到applicationContext.xml的问题
- JSP:tomcat jdbc+spring+hibernate 连接sql server
- Tomcat启动Exception invoking method manageApp
- navicat中文竖着展示,有没有人遇到这个问题
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;public class HandlerExecutorPool { private ExecutorService executor;
public HandlerExecutorPool(int maxPoolSize, int queueSize){
this.executor = new ThreadPoolExecutor(
Runtime.getRuntime().availableProcessors(),
maxPoolSize,
120L,
TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(queueSize));
}
public void execute(Runnable task){
this.executor.execute(task);
}
}