服务器设计、线程、代理线程的学习

以象棋服务器端代码为例://均省区了细节判断条件及界面布局


声明

public class Server extends JFrame implements ActionListener 


构造方法内部做界面初始化

public Server()


单击启动按钮的效果为创建一个服务器进程

public void jbStart_event(){

this.jbStart.setEnabled(false);//将开始按钮设为不可用
this.jtfPort.setEnabled(false);//将用于输入端口号的文本框设为不可用
this.jbStop.setEnabled(true);//将停止按钮设为可用
ss=new ServerSocket(port);//创建ServerSocket对象
st=new ServerThread(this);//创建服务器线程
st.start();//启动服务器线程

}


单击关闭按钮的效果为结束服务器进程,一定要close 节约资源!

public void jbStop_event(){

Vector v=onlineList;

int size=v.size();
for(int i=0;i<size;i++)
{//向在线用户发送离线信息
ServerAgentThread tempSat=(ServerAgentThread)v.get(i);
tempSat.dout.writeUTF("<#SERVER_DOWN#>");
tempSat.flag=false;//关闭服务器代理线程
}
st.flag=false;//关闭服务器线程
st=null;
ss.close();//关闭ServerSocket
v.clear();//将在线用户列表清空
refreshList();//刷新列表
this.jbStart.setEnabled(true);//将开始按钮设为可用
            this.jtfPort.setEnabled(true);//将用于输入端口号的文本框设为可用
        this.jbStop.setEnabled(false);//将停止按钮设为不可用

}



服务器线程文件serverThread:

public class ServerThread extends Thread



接jbstart,将server传入到ServerThread的构造方法

public ServerThread(Server father)
{//构造器
this.father=father;
ss=father.ss;
}


start后继续执行run

public void run()
{
while(flag)
{
try
{
Socket sc=ss.accept();//等待客户端连接 ss是server的socket端口 即客户端连接到了服务器端的端口,保证了相同端口传输 然后再传给代理线程
ServerAgentThread sat=new ServerAgentThread(father,sc);//这里的father就是server。 创建代理线程
sat.start();//创建并启动服务器代理线程
}
catch(Exception e)
{
e.printStackTrace();
}
}
}


进入到代理线程后,用the socket创建输入输出流,传输数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值