问题描述
packagecom.shengsiyuan.server;importjava.awt.Color;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.ArrayList;importjavax.swing.JOptionPane;importcom.shengsiyuan.bean.Users;importcom.shengsiyuan.db.UsersDB;importcom.shengsiyuan.util.XMLUtil;publicclassServerConnectionextendsThread{privateServerserver;privateServerSocketserverSocket;privateInputStreamis;privateOutputStreamos;publicServerConnection(Serverserver,intport){try{this.server=server;this.serverSocket=newServerSocket(port);//下面代码不能放到上面一行代码之前//因为服务器有可能抛出异常//如果放在上面,则发生异常也会导致组件发生改变,与实际情况不同this.server.getLabel2().setText("运行");this.server.getLabel2().setForeground(Color.GREEN);this.server.getButton1().setEnabled(false);this.server.getTextField().setEnabled(false);//组件不能再修改了}catch(IOExceptione){e.printStackTrace();JOptionPane.showMessageDialog(this.server,"端口号被占用!","警告",JOptionPane.ERROR_MESSAGE);}}@Overridepublicvoidrun(){while(true){try{Socketsocket=this.serverSocket.accept();this.is=socket.getInputStream();this.os=socket.getOutputStream();byte[]buffer=newbyte[5000];intlength=is.read(buffer);//从客户端发送的信息Stringxml=newString(buffer,0,length);//判断xml数据类型Stringtype=XMLUtil.extractType(xml);//1代表注册用户名是否重复if("1".equals(type)){//客户端发过来的判断用户名是否注册的信息(username)Stringusername=XMLUtil.extractUsername(xml);StringregisterResult="no";UsersDBuserDB=newUsersDB();ArrayListlist=userDB.getAllUsers();for(inti=0;i<list.size();i++){Usersuser=(Users)list.get(i);if(user.getUsername().equals(username)){//已经注册registerResult="yes";}}//构建注册结果xmlStringregisterResultXML=XMLUtil.constructResultXML(registerResult);os.write(registerResultXML.getBytes());}}catch(Exceptione){e.printStackTrace();}}}}这是server所启动的线程packagecom.shengsiyuan.client;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.Socket;importcom.shengsiyuan.util.XMLUtil;publicclassClientConnnection{privateSocketsocket;privateInputStreamis;privateOutputStreamos;StringhostAddress="localhost";intport=8888;//连接服务privatevoidconnectServer(){try{this.socket=newSocket(this.hostAddress,this.port);this.is=socket.getInputStream();this.os=socket.getOutputStream();}catch(Exceptione){e.printStackTrace();}}//发送用户注册信息publicbooleanregistered(Stringusername){try{connectServer();Stringxml=XMLUtil.contructRegisteredXML(username);os.write(xml.getBytes());//向服务器端发送用户判断的注册信息(主要是判断用户名)//读取服务器的响应结果byte[]buffer=newbyte[5000];intlength=is.read(buffer);StringregisterResultXML=newString(buffer,0,length);StringregisterResult=XMLUtil.extractResult(registerResultXML);if("yes".equals(registerResult)){returntrue;}else{returnfalse;}}catch(Exceptione){e.printStackTrace();}returnfalse;}}
解决方案
解决方案二:
该回复于2014-09-22 08:44:52被版主删除
解决方案三:
能告诉我你想改啥吗