📄 server.java
字号:
package socket.test.tcp.chat;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2005</p> * <p>Company: </p> * @author not attributable * @version 1.0 *//*******************服务端的程序*************************///Server.javaimport java.io.*;import java.awt.*;import java.net.*;import java.awt.event.*;public class Server{ public static void main(String arg[]){ ServerService MyServer=new ServerService(8000,10); } } //交互端的服务窗口 class ServiceThread extends Frame implements ActionListener,Runnable{ ServerService FatherListener; Socket ConnectedClient; Thread ConnectedThread; Panel ListenePanel; TextArea ServerMeg; TextArea ServerWrite; Label la; Button bt; BufferedReader in; PrintWriter out; public ServiceThread(ServerService sv,Socket s){ //容器与格子组建的结合 FatherListener=sv; ConnectedClient=s; ConnectedThread =new Thread(this); //采用线程的目的是利用他的并发机制,实现多个任务 //在当前的类中(this)通过Runnabel()接口实现Thread()的Run()方案 setTitle("Answer Client"); setLayout(new GridLayout(4,1)); //采用格子组建的形式完成组建的安排 ServerMeg=new TextArea(null,5,45,TextArea.SCROLLBARS_VERTICAL_ONLY); //添加各种组建到容器当中 ListenePanel=new Panel(); ListenePanel.add(ServerMeg); add(ListenePanel); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ //((Frame)e.getWindow()).dispose();//保留的语句 System.exit(0); }}); //第二个Panel() la=new Label("服务端消息输入框..............."); add(la); ServerWrite=new TextArea(10,50); add(ServerWrite); //add(p2); setSize(355,360); Panel p3=new Panel(); bt=new Button("传送"); bt.addActionListener(this); p3.add(bt); add(p3); setResizable(false); show(); InetAddress ClientAddress=ConnectedClient.getInetAddress(); ServerMeg.append("Client Conneted from "+ClientAddress.getHostAddress()+"!"); } //完成事件的部 //面临的一个问题是空发消息 public void actionPerformed(ActionEvent ex){ if(ex.getSource()==bt){ if((int)((ServerWrite.getText().toString()).length())!=0) ServerMeg.append("服务端消息:"+ServerWrite.getText()+""); out.println(""+ServerWrite.getText()); ServerWrite.setText(""); } else { ServerMeg.append("系统提示: 不能空法消息!\n"); } } // 覆盖线程的run()方法 public void run(){ try{ in= new BufferedReader(new InputStreamReader(ConnectedClient.getInputStream())); out=new PrintWriter(ConnectedClient.getOutputStream(),true); out.println("Hello! Wellocme connect our server !"); out.flush(); String s=in.readLine(); if(s.equals("bye")) out.println("已经断开与服务器的连接.............. 欢 迎 下 次 观 顾!"); while(!s.equals("bye")){ ServerMeg.append("#_________________________________________#"+s); s=in.readLine(); } ConnectedClient.close(); }catch(Exception e){} FatherListener.addMeg("Client"+"Cloesd."+""); }//run(),finished; } //服务窗口 class ServerService extends Frame{ ServerSocket Listener; TextArea ListenerMeg; public ServerService(int port,int Count){ try{ Listener=new ServerSocket(port,Count);//开启监听的端口 setTitle("服务监听"); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ ((Frame)e.getWindow()).dispose();//释放组建与内存 System.exit(0); }}); setLayout(new BorderLayout()); ListenerMeg=new TextArea("监听服务已经启动 ",10,50); add("Center",ListenerMeg); setResizable(false);//设计固定的状态 pack();//重新的打包 show(); while(true){ Socket connected=Listener.accept();//等待外部的连接,直到连接成功才返回一个套接字 InetAddress ClientAddress=connected.getInetAddress(); ListenerMeg.append(" Client connected from :"+ ClientAddress.toString()); ServiceThread MyST=new ServiceThread(this,connected);//初使化服务线程 //this指向当前对象的指针 MyST.ConnectedThread.start();//启动线程 } //获取套接子,激活线程,采用循环的语句解决方式 }catch(Exception ep){} } public void addMeg(String s){ ListenerMeg.append(s); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -