📄 server.java
字号:
import java.io.*;
import java.net.*;
import java.sql.*;
import java.util.Vector;
class ServerThread extends Thread{//继承线程
private Socket socket;//定义接口
private BufferedReader in;//定义输入
private PrintWriter out;//定义输出
int no;//定义申请的Jtalk号码
public ServerThread(Socket s) throws IOException {//线程构造函数
socket=s;//取得传递参数
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//创建输入流
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);//创建输出流
start();//启动线程
}
public void run(){//线程监听函数
try{ while(true){
String str=in.readLine();//取得输入字符串
if(str.equals("end"))break;//如果是结束就关闭连接
else if(str.equals("login")) {//如果是登录
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库
Connection c=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
String sql="select nickname,password from talk where num=?";
//准备从数据库选择呢称和密码
PreparedStatement prepare=c.prepareCall(sql);//设定数据库查寻条件
String num=in.readLine();
int g=Integer.parseInt(num);//取得输入的Jtalk号码
System.out.println(num);
String passwd=in.readLine().trim();//取得输入的密码
System.out.println(passwd);
prepare.clearParameters();
prepare.setInt(1,g);//设定参数
ResultSet r=prepare.executeQuery();//执行数据库查寻
if(r.next()){//以下比较输入的号码于密码是否相同
String pass=r.getString("password").trim();
System.out.println(pass);
if(passwd.regionMatches(0,pass,0,pass.length()))
{ out.println("ok");//如果相同就告诉客户ok
String setip="update talk set ip=? where num=?";
PreparedStatement prest=c.prepareCall(setip);
prest.clearParameters();
prest.setString(1,socket.getInetAddress().getHostAddress());
prest.setInt(2,g);
int set=prest.executeUpdate();
System.out.println("result of set ip:"+set);
String status="update talk set status=1 where num=?";
PreparedStatement prest2=c.prepareCall(status);
prest2.clearParameters();
prest2.setInt(1,g);
int set2=prest2.executeUpdate();
System.out.println("result of set status:"+set2);
}
//否则出错
else {out.println("Error");r.close();c.close();}}
else{ out.println("Error");
System.out.println("Error");
r.close();
c.close();}
}catch (Exception e){e.printStackTrace();}
socket.close();
}
//以下为新建用户
else if(str.equals("new")){
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库
Connection c2=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
String sql2="select max(num) from talk";
PreparedStatement prepare3=c2.prepareCall(sql2);
prepare3.clearParameters();
ResultSet r2=prepare3.executeQuery();
while(r2.next()){
no=r2.getInt(1);
if(no==0)
no=1;
else
no++;
}
String newsql="insert into talk(num,nickname,password,email,info,place,pic) values(?,?,?,?,?,?,?)";
PreparedStatement prepare2=c2.prepareCall(newsql);
String nickname=in.readLine().trim();
String password=in.readLine().trim();
String email=in.readLine().trim();
String info=in.readLine().trim();
String place=in.readLine().trim();
int picindex=Integer.parseInt(in.readLine());
prepare2.clearParameters();
prepare2.setInt(1,no);
prepare2.setString(2,nickname);
prepare2.setString(3,password);
prepare2.setString(4,email);
prepare2.setString(5,info);
prepare2.setString(6,place);
prepare2.setInt(7,picindex);
int r3=prepare2.executeUpdate();//执行数据库添加
//System.out.println(no);
//以下提示注册的Jtalk号码
out.println(no);
out.println("ok");
c2.close();
}catch (Exception e){e.printStackTrace();out.println("ERROR");}
socket.close();
}
//以下为查找好友
else if(str.equals("find")){
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c3=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
String find="select nickname,sex,place,ip,email,info from talk";
Statement st=c3.createStatement();
ResultSet result=st.executeQuery(find);
while(result.next()){
out.println(result.getString("nickname"));
out.println(result.getString("sex"));
out.println(result.getString("place"));
out.println(result.getString("ip"));
out.println(result.getString("email"));
out.println(result.getString("info"));
}
out.println("over");
int d,x;
boolean y;
//以下返回用户的Jtalk号码,头像号,及是否在线
ResultSet iset=st.executeQuery("select num,pic,status from talk");
while(iset.next()){
d=iset.getInt("num");
out.println(d);
x=iset.getInt("pic");
out.println(x);
y=iset.getBoolean("status");
if (y){out.println("1");}
else {out.println("0");}
}
iset.close();
c3.close();result.close();
}catch (Exception e){e.printStackTrace();System.out.println("ERROR");}
}
//以下为登录时读取好友资料
else if(str.equals("friend")){
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c4=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
//以下连接好友表,返回用户的好友名单
String friend="select friend from friend where num=?";
PreparedStatement prepare4=c4.prepareCall(friend);
prepare4.clearParameters();
int num=Integer.parseInt(in.readLine());
System.out.println(num);
prepare4.setInt(1,num);
ResultSet r4=prepare4.executeQuery();
Vector friendno=new Vector();
while(r4.next()){
friendno.add(new Integer(r4.getInt(1)));
}
//以下显示好友的呢称,号码,ip地址,状态,头像,个人资料
out.println(friendno.size());
for(int i=0;i<friendno.size();i++){
String friendinfo="select nickname,num,ip,status,pic,email,info from talk where num=?";
PreparedStatement prepare5=c4.prepareCall(friendinfo);
prepare5.clearParameters();
prepare5.setObject(1,friendno.get(i));
ResultSet r5=prepare5.executeQuery();
boolean status;
while(r5.next()){
out.println(r5.getString("nickname"));
out.println(r5.getInt("num"));
out.println(r5.getString("ip"));
status=r5.getBoolean("status");
if (status)out.println("1");
else {out.println("0");}
out.println(r5.getInt("pic"));
out.println(r5.getString("email"));
out.println(r5.getString("info"));
}
r5.close();
}
out.println("over");
System.out.println("over");
c4.close();r4.close();
}catch (Exception e){e.printStackTrace();System.out.println("ERROR");}
}
//以下为添加好友
else if(str.equals("addfriend")){
System.out.println("add");
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c6=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
int friendnum=Integer.parseInt(in.readLine());
System.out.println("friendnum:"+friendnum);
int mynum=Integer.parseInt(in.readLine());
System.out.println("mynum:"+mynum);
String addfriend="insert into friend values(?,?)";
PreparedStatement prepare6=c6.prepareCall(addfriend);
prepare6.clearParameters();
prepare6.setInt(1,mynum);
prepare6.setInt(2,friendnum);
int r6=0;
r6=prepare6.executeUpdate();
if(r6==1) System.out.println("addfriend sucessfully");
else System.out.println("addfriend fail");
}catch (Exception e){e.printStackTrace();System.out.println("ERROR");}
System.out.println("end addfriend");
}
else if(str.equals("addnewfriend")){
System.out.println("add");
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c6=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
int friendnum=Integer.parseInt(in.readLine());
System.out.println("friendnum:"+friendnum);
int mynum=Integer.parseInt(in.readLine());
System.out.println("mynum:"+mynum);
String addfriend="insert into friend values(?,?)";
PreparedStatement prepare6=c6.prepareCall(addfriend);
prepare6.clearParameters();
prepare6.setInt(1,mynum);
prepare6.setInt(2,friendnum);
int r6=0;
r6=prepare6.executeUpdate();
if(r6==1) System.out.println("addfriend sucessfully");
else System.out.println("addfriend fail");
String friendinfo="select nickname,num,ip,status,pic,email,info from talk where num=?";
//加好友成功,显示好友信息
PreparedStatement prepare5=c6.prepareCall(friendinfo);
prepare5.clearParameters();
prepare5.setInt(1,friendnum);
ResultSet r5=prepare5.executeQuery();
boolean status;
while(r5.next()){
out.println(r5.getString("nickname"));
out.println(r5.getInt("num"));
out.println(r5.getString("ip"));
status=r5.getBoolean("status");
if (status)out.println("1");
else {out.println("0");}
out.println(r5.getInt("pic"));
out.println(r5.getString("email"));
out.println(r5.getString("info"));
}
out.println("over");
r5.close();
c6.close();
}catch (Exception e){e.printStackTrace();System.out.println("ERROR");}
System.out.println("over addnewfriend");
}
//以下为删除好友
else if(str.equals("delfriend")){
System.out.println("del");
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c7=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
int friendnum=Integer.parseInt(in.readLine());
System.out.println("friendnum:"+friendnum);
int mynum=Integer.parseInt(in.readLine());
System.out.println("mynum:"+mynum);
String addfriend="delete from friend where num=? and friend=?";
PreparedStatement prepare7=c7.prepareCall(addfriend);
prepare7.clearParameters();
prepare7.setInt(1,mynum);
prepare7.setInt(2,friendnum);
int r7=0;
r7=prepare7.executeUpdate();
if(r7==1) System.out.println("delfrien sucessfully");
else System.out.println("delfriend fail");
}catch (Exception e){e.printStackTrace();System.out.println("del Error");}
}
//以下为退出
else if(str.equals("logout")){
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c8=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
//连接数据库,退出的用户状态设为0,ip地址清空
int mynum=Integer.parseInt(in.readLine());
System.out.println(mynum);
String status="update talk set status=0 , ip=' ' where num=?";
PreparedStatement prest8=c8.prepareCall(status);
prest8.clearParameters();
prest8.setInt(1,mynum);
int r8=prest8.executeUpdate();
if(r8==1) System.out.println("ok logout");
else System.out.println("ERROR logout");
}catch (Exception e){e.printStackTrace();System.out.println("logout ERROR");}
}
//以下为上线通知
else if(str.equals("getwhoaddme")){
System.out.println("getwhoaddme");
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c9=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
int mynum=Integer.parseInt(in.readLine());
System.out.println(mynum);
String getwhoaddme="select num from friend where friend=?";
PreparedStatement prepare6=c9.prepareCall(getwhoaddme);
prepare6.clearParameters();
prepare6.setInt(1,mynum);
ResultSet r6=prepare6.executeQuery();
Vector who=new Vector();
while(r6.next()){
who.add(new Integer(r6.getInt(1)));
}
for(int i=0;i<who.size();i++){
String whoinfo="select ip from talk where num=? and status=1";
PreparedStatement prepare=c9.prepareCall(whoinfo);
prepare.clearParameters();
prepare.setObject(1,who.get(i));
ResultSet r=prepare.executeQuery();
while(r.next()){
out.println(r.getString("ip"));
}
r.close();
}
out.println("over");
System.out.println("over");
c9.close();r6.close();
}catch (Exception e){e.printStackTrace();System.out.println("Error");}
}//找寻IP,给这些用户发上线通知
System.out.println("Echo ing :"+str);
} System.out.println("Close...");
}catch(IOException e){}
finally {try{socket.close();}
catch(IOException e){}
}
}
}
public class Server{
public static void main(String args[])throws IOException{
ServerSocket s=new ServerSocket(8080);//在8080端口创建接口
System.out.println("Server start.."+s);
try{
while(true){Socket socket=s.accept();//监听客户的请求
System.out.println("Connectino accept:"+socket);
try{new ServerThread(socket);//创建新线程
}catch(IOException e){socket.close();}
}
}finally{s.close();}//捕或异常
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -