qzj7399086 qzj7399086
关注数: 18 粉丝数: 59 发帖数: 1,962 关注贴吧数: 16
求大神指点,我的socket为何不能一直收发信息 Server.java public class Server { ServerSocketserverSocket; ServerThreadserverThread; booleansign= true; public static void main(String[] args) { Server server = new Server ( ); server.startServer();//暂时设为自动启动 try { server.showmenu ( ); while ( true ) { InputStreamReader reader = new InputStreamReader ( System.in ); BufferedReader br = new BufferedReader ( reader ); String chooce = br.readLine ( ); if ( "0".equals ( chooce ) ) server.exitSystem ( ); if ( "1".equals ( chooce ) ) server.startServer ( ); if ( "2".equals ( chooce ) ) server.stopServer ( ); if ( "3".equals ( chooce ) ) server.showmenu ( ); } } catch ( Exception e ) { e.printStackTrace ( ); } } public void startServer ( ) { if ( sign == true ) { try { serverSocket = new ServerSocket ( 9999 ); serverThread = new ServerThread ( serverSocket ); serverThread.start ( ); sign = false; System.out.println ( "\n 服务器--启动成功。\n" ); } catch ( Exception e ) { System.out.println ( "\n 服务器--启动失败!\n" ); } } else { System.out.println ( "\n 服务器--已经启动" ); } } public void stopServer ( ) { if ( sign == false ) { try { if ( serverThread != null ) { serverThread.flag = false;// 关闭服务器线程 serverThread.serverSocket.close ( ); serverThread = null; } this.serverSocket.close ( ); sign = true; System.out.println ( "服务器--关闭成功" ); } catch ( IOException e ) { System.out.println ( "服务器关闭出现异常!" ); e.printStackTrace ( ); } } else { System.out.println ( "服务器--未启动" ); } } public void exitSystem ( ) { this.stopServer ( ); System.out.println ( "服务器线程关闭----退出程序" ); System.exit ( 0 ); } //显示菜单 public void showmenu ( ) { System.out.println ( "服务器菜单" ); System.out.println ( "请选择输入相应菜单对应的标号" ); System.out.println ( "1 启动服务器" ); System.out.println ( "2 关闭服务器" ); System.out.println ( "3 显示菜单" ); System.out.println ( "0 关闭程序" ); } } 服务器线程类 ServerThread.java public class ServerThread extends Thread{ ServerSocket serverSocket; boolean flag = true; public ServerThread( ServerSocket serverSocket ){ this.serverSocket = serverSocket; } public void run( ){ while( flag ){ try{ Socket socket = serverSocket.accept( ); ServerThreadAgent serverThreadAgent = new ServerThreadAgent( socket ); serverThreadAgent.start( ); } catch( Exception e ){ e.printStackTrace( ); }}}} 服务器代理类,处理输入输出 ServerThreadAgent.java public class ServerThreadAgent extends Thread{ Socketsocket; public ServerThreadAgent ( Socket socket ){ this.socket = socket; } /** * 在代理线程中进行业务处理 */ public void run ( ) { try { Object message = SocketUtil.readStream ( socket );// 接收信息 System.out.println ( socket.getInetAddress ( ) + "发来信息:" + message); String sendMessage = "信息已经收到。"; SocketUtil.writeStream ( sendMessage, socket );// 发送信息 } catch ( Exception e ) { e.printStackTrace ( ); } } }
1 下一页