package duisong;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Timer;
/**
* @author Administrator
*
*/
public class Server {
private int PORT = 9000;
private ServerSocket ss = null;
private Timer timer = new Timer();
public Server() {
try {
ss = new ServerSocket(PORT);
System.out.println("server start");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
Server server = new Server();
server.startup();
}
public void startup() {
Socket s = null;
while (true) {
try {
s = ss.accept();
Handler handler = new Handler(s);
timer.schedule(handler, 1000, 3000);
} catch (IOException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
}
-----------------------
package duisong;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Date;
import java.util.TimerTask;
/**
* @author Administrator
*
*/
public class Handler extends TimerTask {
private Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
String nowTime = (new Date()).toLocaleString();
try {
if (socket != null && socket.isConnected()) {
// 这里打个擦边球,先发送个紧急的数据包,如果发送发送了异常,说明客户端已经关闭了socket连接了,进入异常处理程序
socket.sendUrgentData(0xFF);
System.out.println(nowTime);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket
.getOutputStream()));
pw.append(nowTime);
pw.append("\r");
pw.flush();
}
} catch (IOException e) {
try {
e.printStackTrace();
socket.close();
} catch (IOException e2) {
}
this.cancel();
}
}
}
------------------------
package duisong;
import java.applet.Applet;
import java.awt.Label;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* 此程序eclipse运行良好,但是在IE中引入该Applet就出错了,提示access denied
* 是由于客户端的安全策略引起的,看来还是要用flash比较靠谱
*
*/
public class SocketApplet extends Applet implements Runnable {
Label text = new Label();
private Socket socket;
private BufferedReader br;
public SocketApplet() {
}
public void init() {
text.setText("time begin");
add(text);
try {
socket = new Socket("127.0.0.1", 9000);
br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
text.setText("socket setup ok ...");
// 初始化完毕,启动线程处理
new Thread(this).start();
} catch (Exception e) {
text.setText(e.getMessage());
}
}
public void run() {
while (true) {
try {
text.setText(br.readLine());
} catch (IOException e) {
}
}
}
}
1.server端监听9000端口,如果client端有加入
s = ss.accept();继续执行,进而执行逻辑,向client端口输出数据,
否则,stop here
2.client端可以设计线程池,有序列的向服务器端发送请求。
减少并发性操作服务器
socket服务器推送技术
猜你喜欢
转载自zlr.iteye.com/blog/1161335
今日推荐
周排行