我写了一个类,目的是监听端口,当客户端发送请求时,这个类根据相应的请求做出相应的处理,这个类在有main的情况下单独运行OK,
能接收到请求,但是我要把这个类放到Applet里,怎么才能让这个类随applet启动自动启动,自动一直运行,一旦收到客户端请求就处理。
注意:没有其他方法调用,我加了线程也不能自己启动。希望各位帮帮忙,以下是我的代码:
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.net.ServerSocket;
import java.net.Socket;public class ChangeModel implements Runnable{
public static final String CHARSET = "UTF-8";
private TransmitApplet transmitApplet; //处理方法类
private Thread thread; //线程
private int port = 8821; //端口
private int p1=49;
private int p4=50;
private int p6=51;
private boolean close_flag = true;
@Override
public void run(){
Socket s = null;
try{
ServerSocket ss = new ServerSocket(port);
while (true){
s.setSoTimeout(1000);
//Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例
System.out.println("准备接受请求!");
s = ss.accept();
//s.getInputStream()获得网络连接输入,同时返回一个IutputStream对象实例
/*************这个方法接收整型**************************/
DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
Integer num=dis.read();
//处理
if(num.equals(p1)){
transmitApplet.changeScreenMode(p1);
System.out.println("Int 类型 " + num);
}
else if(num.equals(p4)){
transmitApplet.changeScreenMode(p4);
}
else if(num.equals(p6)){
transmitApplet.changeScreenMode(p6);
}
s.close(); //关闭socket
System.out.println("请求完毕!");
}
}
catch (Exception e){
System.out.println("连接错误");
//e.printStackTrace();
pause(100);
restart();
}
}
/**
* 启动线程
*/
public void start(){
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
/**
* 重新启动线程
*/
public void restart(){
if(!close_flag){
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
}
/**
* 休眠
* @param s
*/
private void pause(int s){
try{
Thread.sleep(s);
}
catch(InterruptedException ie){
ie.printStackTrace();
}
}
public static void main(String arg[]) {
new ChangeModel().start();
}}
能接收到请求,但是我要把这个类放到Applet里,怎么才能让这个类随applet启动自动启动,自动一直运行,一旦收到客户端请求就处理。
注意:没有其他方法调用,我加了线程也不能自己启动。希望各位帮帮忙,以下是我的代码:
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.net.ServerSocket;
import java.net.Socket;public class ChangeModel implements Runnable{
public static final String CHARSET = "UTF-8";
private TransmitApplet transmitApplet; //处理方法类
private Thread thread; //线程
private int port = 8821; //端口
private int p1=49;
private int p4=50;
private int p6=51;
private boolean close_flag = true;
@Override
public void run(){
Socket s = null;
try{
ServerSocket ss = new ServerSocket(port);
while (true){
s.setSoTimeout(1000);
//Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例
System.out.println("准备接受请求!");
s = ss.accept();
//s.getInputStream()获得网络连接输入,同时返回一个IutputStream对象实例
/*************这个方法接收整型**************************/
DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
Integer num=dis.read();
//处理
if(num.equals(p1)){
transmitApplet.changeScreenMode(p1);
System.out.println("Int 类型 " + num);
}
else if(num.equals(p4)){
transmitApplet.changeScreenMode(p4);
}
else if(num.equals(p6)){
transmitApplet.changeScreenMode(p6);
}
s.close(); //关闭socket
System.out.println("请求完毕!");
}
}
catch (Exception e){
System.out.println("连接错误");
//e.printStackTrace();
pause(100);
restart();
}
}
/**
* 启动线程
*/
public void start(){
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
/**
* 重新启动线程
*/
public void restart(){
if(!close_flag){
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
}
/**
* 休眠
* @param s
*/
private void pause(int s){
try{
Thread.sleep(s);
}
catch(InterruptedException ie){
ie.printStackTrace();
}
}
public static void main(String arg[]) {
new ChangeModel().start();
}}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货