我想用JAVA做个像QQ一样的软件,大家有什么建议或资料???? 要用到socket吧,我不懂,瞎说呵呵 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 基于JAVA的ICQ系统的设计于实现 http://www.cn-java.com/target/news.php?news_id=420记得给分,哈哈。 服务器程序代码如下:(部分)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;//定义申请的jicq号码 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:javaicq"," "," "); String sql="select nickname,password from icq where icqno=?"; //准备从数据库选择呢称和密码 PreparedStatement prepare=c.prepareCall(sql);//设定数据库查寻条件 String icqno=in.readLine(); int g=Integer.parseInt(icqno);//取得输入的jicq号码 System.out.println(icqno); 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//并且更新数据库用户为在线//以及注册用户的ip 地址 //*************register ipaddress String setip="update icq set ip=? where icqno=?"; PreparedStatement prest=c.prepareCall(setip); prest.clearParameters(); prest.setString(1,socket.getInetAddress().getHostAddress()); prest.setInt(2,g); int set=prest.executeUpdate(); System.out.println(set); //*************ipaddress //set status online String status="update icq set status=1 where icqno=?"; PreparedStatement prest2=c.prepareCall(status); prest2.clearParameters(); prest2.setInt(1,g); int set2=prest2.executeUpdate(); System.out.println(set2); //set online}//否者告诉客户失败 else out.println("false");r.close();c.close();} else{ out.println("false"); System.out.println("false"); r.close(); c.close();} }catch (Exception e){e.printStackTrace();} socket.close(); }//end login //登录结束 //以下为处理客户的新建请求else if(str.equals("new")){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库 Connection c2=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");String newsql="insert into icq(nickname,password,email,info,place,pic) values(?,?,?,?,?,?)";//准备接受用户的呢称,密码,email,个人资料,籍贯,头像等信息 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.setString(1,nickname); prepare2.setString(2,password); prepare2.setString(3,email); prepare2.setString(4,info); prepare2.setString(5,place); prepare2.setInt(6,picindex); int r3=prepare2.executeUpdate();//执行数据库添加String sql2="select icqno from icq where nickname=?";//以下告诉客户其注册的号码 PreparedStatement prepare3=c2.prepareCall(sql2); prepare3.clearParameters(); prepare3.setString(1,nickname); ResultSet r2=prepare3.executeQuery(); while(r2.next()){ //out.println(r2.getInt(1)); no=r2.getInt(1); System.out.println(no); } out.println(no); out.println("ok");c2.close();//完毕 }catch (Exception e){e.printStackTrace();out.println("false");} socket.close(); }//end new //新建用户结束 //以下处理用户查找好友 else if(str.equals("find")){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection c3=DriverManager.getConnection("jdbc:odbc:javaicq"," "," "); //以下连接数据库,并且返回其他用户的呢称,性别,籍贯,个人资料等信息 String find="select nickname,sex,place,ip,email,info from icq"; 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")); }//while end out.println("over"); ////////GET ICQNO int d,x;boolean y;//以下返回用户的jicq号码,头像号,及是否在线 ResultSet iset=st.executeQuery("select icqno,pic,status from icq"); while(iset.next()){ d=iset.getInt("icqno"); out.println(d); x=iset.getInt("pic");//pic info out.println(x); y=iset.getBoolean("status"); if (y){out.println("1");} else {out.println("0");} //System.out.println(d); } // end send jicqno iset.close(); /////////icqno end c3.close();result.close(); }catch (Exception e){e.printStackTrace();System.out.println("false");} //socket.close(); }//end find fangkq111(fangkq1,你的代码能用来用了吗?再说,怎样生成一个可安装文件呢? java我也想学,但是我现在在学vc++没有时间学java但以后一定会学的我现在可以做QQ了,…… 忘记告诉你们我的email:[email protected] 我记得 ibm dw上有一篇这样的文章。可以差一下。 望高手指点:线程并行操作! 贪吃蛇创意需求征集(标题短也不让发) 关于定时器的使用疑问?在线等 根据登陆者的IP地址来定位地区频道 关于进制转换问题 我想請問一下:從來沒有學過java, 我想從java的數據結構開始學習java, 直接學習java的算法, 不直到好不好? :) java取月份的总天数问题 如何按照 页面设置 的效果打印??? 送分了##¥#¥%……¥—#%! 怎样返回一个数组??——急! 今天开始学。 如何用Java通过POST方法向HTTP接口传递数据?
http://www.cn-java.com/target/news.php?news_id=420记得给分,哈哈。
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;//定义申请的jicq号码
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:javaicq"," "," ");
String sql="select nickname,password from icq where icqno=?";
//准备从数据库选择呢称和密码
PreparedStatement prepare=c.prepareCall(sql);//设定数据库查寻条件
String icqno=in.readLine();
int g=Integer.parseInt(icqno);//取得输入的jicq号码
System.out.println(icqno);
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
//并且更新数据库用户为在线
//以及注册用户的ip 地址
//*************register ipaddress
String setip="update icq set ip=? where icqno=?";
PreparedStatement prest=c.prepareCall(setip);
prest.clearParameters();
prest.setString(1,socket.getInetAddress().getHostAddress());
prest.setInt(2,g);
int set=prest.executeUpdate();
System.out.println(set);
//*************ipaddress
//set status online
String status="update icq set status=1 where icqno=?";
PreparedStatement prest2=c.prepareCall(status);
prest2.clearParameters();
prest2.setInt(1,g);
int set2=prest2.executeUpdate();
System.out.println(set2);
//set online
}
//否者告诉客户失败
else out.println("false");r.close();c.close();}
else{ out.println("false");
System.out.println("false");
r.close();
c.close();}
}catch (Exception e){e.printStackTrace();}
socket.close();
}//end login
//登录结束
else if(str.equals("new")){
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库
Connection c2=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
String newsql="insert into icq(nickname,password,email,info,place,pic) values(?,?,?,?,?,?)";
//准备接受用户的呢称,密码,email,个人资料,籍贯,头像等信息
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.setString(1,nickname);
prepare2.setString(2,password);
prepare2.setString(3,email);
prepare2.setString(4,info);
prepare2.setString(5,place);
prepare2.setInt(6,picindex);
int r3=prepare2.executeUpdate();//执行数据库添加
String sql2="select icqno from icq where nickname=?";
//以下告诉客户其注册的号码
PreparedStatement prepare3=c2.prepareCall(sql2);
prepare3.clearParameters();
prepare3.setString(1,nickname);
ResultSet r2=prepare3.executeQuery();
while(r2.next()){
//out.println(r2.getInt(1));
no=r2.getInt(1);
System.out.println(no);
}
out.println(no);
out.println("ok");
c2.close();
//完毕
}catch (Exception e){e.printStackTrace();out.println("false");}
socket.close();
}//end new
//新建用户结束
//以下处理用户查找好友
else if(str.equals("find")){
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c3=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
//以下连接数据库,并且返回其他用户的呢称,性别,籍贯,个人资料等信息
String find="select nickname,sex,place,ip,email,info from icq";
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"));
}//while end
out.println("over");
////////GET ICQNO
int d,x;
boolean y;
//以下返回用户的jicq号码,头像号,及是否在线
ResultSet iset=st.executeQuery("select icqno,pic,status from icq");
while(iset.next()){
d=iset.getInt("icqno");
out.println(d);
x=iset.getInt("pic");//pic info
out.println(x);
y=iset.getBoolean("status");
if (y){out.println("1");}
else {out.println("0");}
//System.out.println(d);
}
// end send jicqno
iset.close();
/////////icqno end
c3.close();result.close();
}catch (Exception e){e.printStackTrace();System.out.println("false");}
//socket.close();
}//end find
再说,怎样生成一个可安装文件呢?
但以后一定会学的
我现在可以做QQ了,……