📄 clientthread.java
字号:
package serverframe;
import java.io.*;
import java.awt.*;
import java.net.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
class ClientThread extends Thread
{
Socket cSocket;
PrintStream write;//输出流
BufferedReader read;//输入流
ServerThread sThread;//服务器线程
public String[] biaoshi=new String[4];
JTextArea sStatus;
String m;
int i=0;
public String Message;
public static int ConnectNumber = 0;//连机数目
ServerFrame frame;
String[] A={"A","A","B","C","D","E","F"};
Connection conn=null;//申明一对象便于与特定数据库的连接
Statement sttm=null;//用于执行静态 SQL 语句并返回它所生成结果的对象。
String sql="";//用来装sql语句
ResultSet rs=null;//游标
String username;//用户名
String userscore;//分数
public String name[]=new String[6];//姓名数组
public String score[]=new String[6];//分数数组
public ClientThread(Socket cSocket,ServerThread sThread)
{
this.cSocket = cSocket;//把serverthread中调用是的直传过来给本地变量
this.sThread = sThread;
sStatus = sThread.frame.ServerStatus;//让文本在同一窗体空件显示
ConnectNumber++;//客户机人数加一,当在有客户连接时调用该类则人数加1
//accessinput();
sThread.messages.addElement(m);
try
{
write = new PrintStream(cSocket.getOutputStream());//得到输出流
read = new BufferedReader(
new InputStreamReader(cSocket.getInputStream()));//得到输入流
}
catch(IOException E)
{
System.out.println("发生例外: " + E);
System.out.println("建立I/O管道失败!");
System.exit(0);
}
m = "talk:"+"="+ "战斗人数: " + ConnectNumber + "请选择"+A[ConnectNumber]+" 区域"+" \n\n";
sThread.messages.addElement(m);
sThread.messages.addElement("XUAN="+"请选择"+A[ConnectNumber]+"区域!"+"\n");
}
public void run()
{
while(true)
{
try
{
Message = read.readLine();//放在run里一直读取客户端发来的信息
//并把消息放在message 中
if(Message!=null)
if(Message.startsWith("ACNAME"))
{
username = Message.substring(6, Message.length());//从读来的数据的地6个开始不他放进username中
}
if(Message.startsWith("ACSCORE"))
{
userscore = Message.substring(7, Message.length());//从读来的数据的地6个开始不他放进username中
acceptname();
}
if(Message.equals("重新"))
{
m="重新";
sThread.messages.addElement(m);
}
sentscore();//向请求看分数的玩家发送分数消息
synchronized(sThread.messages)
{
if(Message != null)
{
if(Message.equals("gameover"))
{
ConnectNumber--;
Message = "talk"+getClientName() + ":" + getClientAddress() +
"已离开 ";
sStatus.append(Message + " ");
sStatus.append("目前连线数: " + ConnectNumber + "\n");
sThread.messages.addElement(Message);//让serverthread中的message加上接收到的消息
synchronized(sThread.Clients)
{
sThread.Clients.removeElement(this);//把该线程移出该处
}
break;
}
else
{
/* Message = "来自" + getClientName() + ":" +
getClientAddress() + "\n=> " + Message + "\n";*/
Message = Message +"<=>"+ "来自" + getClientName() + ":"+"\n";
sThread.messages.addElement(Message);//让serverthread中的message加上接收到的消息
}
}
}
}
catch(IOException E)
{
break;
}
}
}
public String getClientName()//得到客户机名字
{
return cSocket.getInetAddress().getHostName();
}
public String getClientAddress()//得到客户机地址
{
return cSocket.getInetAddress().getHostAddress();
}
public void accessinput()//显示数据库
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
try
{
conn=DriverManager.getConnection("jdbc:odbc:game");
sttm=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
}
catch(SQLException eu)
{
System.out.println(eu.getMessage());
}
}
catch(ClassNotFoundException ey)
{
System.out.println(ey.getMessage());
}
sql="select top 10 * from paihangbang order by score desc";
try{
rs=sttm.executeQuery(sql);
rs.absolute(1);
for(int i=0;i<6;i++)
{
name[i]=rs.getString("name");
score[i]=rs.getString("score");
rs.next();
//ServerStatus.append(name[i]+"======="+score[i]+"\n");
}
}
catch(SQLException e){e.printStackTrace();}
}
public void sentscore()
{
if(Message!=null)
if(Message.equals("AVIEW"))//如果客户断请求看成绩
{ accessinput();
for(int i=0;i<6;i++)
{ //frame.accessinput();
m="A成绩:"+name[i]+"====="+score[i]+"\n";
sThread.messages.addElement(m);
}
}
else if(Message.equals("BVIEW"))//如果客户断请求看成绩
{accessinput();
for(int i=0;i<6;i++)
{ //frame.accessinput();
m="B成绩:"+name[i]+"====="+score[i]+"\n";
sThread.messages.addElement(m);
}
}
else if(Message.equals("CVIEW"))//如果客户断请求看成绩
{accessinput();
for(int i=0;i<6;i++)
{ //frame.accessinput();
m="C成绩:"+name[i]+"====="+score[i]+"\n";
sThread.messages.addElement(m);
}
}
else if(Message.equals("DVIEW"))//如果客户断请求看成绩
{accessinput();
for(int i=0;i<6;i++)
{ //frame.accessinput();
m="D成绩:"+name[i]+"====="+score[i]+"\n";
sThread.messages.addElement(m);
}
}
else if(Message.equals("EVIEW"))//如果客户断请求看成绩
{accessinput();
for(int i=0;i<6;i++)
{ //frame.accessinput();
m="E成绩:"+name[i]+"====="+score[i]+"\n";
sThread.messages.addElement(m);
}
}
else if(Message.equals("FVIEW"))//如果客户断请求看成绩
{accessinput();
for(int i=0;i<6;i++)
{ //frame.accessinput();
m="F成绩:"+name[i]+"====="+score[i]+"\n";
sThread.messages.addElement(m);
}
}
}
public void acceptname()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
try
{
conn=DriverManager.getConnection("jdbc:odbc:game");
sttm=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
}
catch(SQLException eu)
{
System.out.println(eu.getMessage());
}
}
catch(ClassNotFoundException ey)
{
System.out.println(ey.getMessage());
}
/////////////////////////////////////////////////////
try
{
sql="select * from paihangbang where name='"+username.trim()+"'";//判断此用户是否已经存在于本数据库中
//sql="select * from paihangbang where name="+"'"+username.getText().trim()+"'";
rs=sttm.executeQuery(sql);
rs.absolute(1);
if(!rs.isFirst())//如果不存在此用户,则插入数据
{
sql="insert into paihangbang values ('"+username.trim()+"','"+userscore.trim()+"')";
int i=sttm.executeUpdate(sql);
if(i==1)
{
m="talk===进入排行榜成功!";
sThread.messages.addElement(m);
}
else
{
m="talk===进入排行榜成功!";
sThread.messages.addElement(m);
}
}
else//如果此用户已经存在,则更新用户的成绩
{
int newscore=Integer.parseInt(userscore.toString());
int oldscore=rs.getInt(2);
//System.out.println(score);
if(oldscore<newscore)//当用户已经存在是,我们要判断此次分数是否比原来的分数高
{
sql = "update paihangbang set score='" + newscore + "'where name='" +
username.trim() + "'";
int i = sttm.executeUpdate(sql);
if (i == 1) {
m="talk===进入排行榜成功!";
sThread.messages.addElement(m);
}
else {
m="talk===进入排行榜成功!";
sThread.messages.addElement(m);
}
}
else
{
m="talk===你还要加油哦!";
sThread.messages.addElement(m);
}
}
}
catch(SQLException ee)
{
System.out.println(ee.getMessage());
}
try
{
conn.close();
sttm.close();
rs.close();
}
catch(SQLException er)
{
System.out.println(er.getMessage());
}
}
public void finalize()//关闭各个流
{
try
{
read.close();
write.close();
cSocket.close();
}
catch(IOException E){}
cSocket = null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -