⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servframe.java

📁 客户服务机模式会话程序
💻 JAVA
字号:
package test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JOptionPane;
import java.net.*;
import java.io.*;

//import com.borland.jbc1.layout.*;
public class ServFrame extends JFrame{
	//JPanel contentPane=new JPanel(new FlowLayout());
	JPanel contentPane;
	JLabel jLabel1;
	JTextField jTextField1;
	JLabel jLabel2;
	JComboBox jComboBox1;
	//XYLayout xYLayout1=new XYLayout();布局管理器
	JButton jButton1;
	JButton jButton2;
	JScrollPane jScrollPanel1;
	JTextArea jTextArea1;
	
	ServerSocket SSocket1;
	Socket Socket1;
	InputStream is;
	OutputStream os;
	BufferedReader br;
	PrintWriter pw;
	String client;
	int port1;
	
	public ServFrame(){
		//启用由传递给此组件的指定事件屏蔽参数所定义的事件 
		enableEvents(AWTEvent.WINDOW_EVENT_MASK);
		try{
			jbInit();
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	private void jbInit() throws Exception{
		//初始化构件
		jLabel1=new JLabel("消息");
		jTextField1=new JTextField("Send Data here:");
		jTextField1.setSize(400, 50);
		jLabel2=new JLabel("客户端");
		jComboBox1=new JComboBox();
		jComboBox1.setSize(200,50);
		jButton1=new JButton("连接");
		jButton2=new JButton("发送");
		jScrollPanel1=new JScrollPane();
		jTextArea1=new JTextArea("Display Data");
		
		contentPane=(JPanel)this.getContentPane();
		contentPane.setLayout(new BorderLayout());
		//设定三个区域,各指定流式布局管理器
		JPanel p1=new JPanel(new FlowLayout(FlowLayout.CENTER,100,20));
		JPanel p2=new JPanel(new FlowLayout(FlowLayout.CENTER,20,20));
		JPanel p3=new JPanel(new FlowLayout());
		//p1.setLayout(new FlowLayout());
		p1.add(jLabel2);
		//设定区域中所加组件的大小
		jComboBox1.setPreferredSize(new Dimension(200,50));
		p1.add(jComboBox1);
		jButton1.setPreferredSize(new Dimension(80,50));
		p1.add(jButton1);
		
		p2.add(jLabel1);
		jTextField1.setPreferredSize(new Dimension(400,60));
		p2.add(jTextField1);
		jButton2.setPreferredSize(new Dimension(80,50));
		p2.add(jButton2);
		
		jTextArea1.setPreferredSize(new Dimension(500,300));
		p3.add(jTextArea1);
		p3.add(jScrollPanel1);
		contentPane.add(p1,BorderLayout.NORTH);
		contentPane.add(p2,BorderLayout.CENTER);
		contentPane.add(p3,BorderLayout.SOUTH);

		//contentPane.setLayout(null);
		this.setSize(new Dimension(800,600));
		this.setTitle("服务器端");
		this.setVisible(true);
		//对按钮添加事件侦听器
		jButton1.addActionListener(new servFrame_jButton1_actionAdapter(this));
		jButton2.addActionListener(new servFrame_jButton2_actionAdapter(this));
		contentPane.setBorder(BorderFactory.createLoweredBevelBorder());
		
	/*	jButton1.setBounds(650, 10, 100, 50);
		contentPane.add(jButton1,0);
		jButton2.setBounds(650, 100, 100, 50);
		contentPane.add(jButton2,0);
		jScrollPanel1.setBounds(200, 10, 400, 50);
		contentPane.add(jScrollPanel1,0);
		contentPane.add(jComboBox1,0);
		jTextField1.setBounds(200, 100, 400, 50);
		contentPane.add(jTextField1,0);
		jLabel1.setBounds(50, 100, 100, 50);
		contentPane.add(jLabel1,0);
		jLabel2.setBounds(50, 10, 100, 50);
		contentPane.add(jLabel2,0);
		jTextArea1.setBounds(100, 300, 600, 250);*/
		//
		jScrollPanel1.getViewport().add(jTextArea1, null);
		
		serverStart();
		System.out.println("JFrame OK");
	}
	public void serverStart() {
		try{
			//建立服务器的连接
			SSocket1=new ServerSocket(2000);
		}catch(Exception e){
			JOptionPane.showMessageDialog(this, "error:"+e.toString());
		}
	}
	protected void processWindowEvent(WindowEvent e){
		super.processWindowEvent(e);
		//关闭窗口
		if(e.getID()==WindowEvent.WINDOW_CLOSING){
			System.exit(0);
		}
	}
	//接收数据线程类
	public class Receiver implements Runnable{
		public Receiver(){};
		public void run(){
			try{
				//获得输入流输出流通道
				is=Socket1.getInputStream();
				os=Socket1.getOutputStream();
				br=new BufferedReader(new InputStreamReader(is));
				pw=new PrintWriter(os);
			}catch(Exception e1){
				e1.printStackTrace();
			}
			String str="";
			while(true){
				try {
					str=br.readLine();
					//将从客户端接受到的数据显示多行文本框中
					if(str!=null){
						if(!str.equals("end")){
							jTextArea1.append("Receive From"+
							Thread.currentThread().getName()+":"+str+"\n");
						}else{
							is.close();
							os.close();
							br.close();
							pw.close();
							Socket1.close();
							jComboBox1.removeItem(client);
							break;
						}
					}
				} catch (IOException e) {
					e.printStackTrace();
				}		
			}
		}
	}
	void jButton1_actionPerformed(ActionEvent e){
		try{
			jButton1.setEnabled(false);
			//启动侦听线程
			Socket1=SSocket1.accept();
			System.out.println("Server OK");
			//获得服务器端口
			jTextArea1.append("localhost:"+SSocket1.getLocalPort()+"\n");
			client=Socket1.getInetAddress().toString();
			//在组合框里加上新增的客户端IP号
			jComboBox1.addItem(client);
			jTextArea1.append("Client has connected:"+client+"\n");
			port1=Socket1.getPort();
			jTextArea1.append("Port:"+port1+"\n");
			Thread t1=new Thread(new Receiver(),"Client1");
			t1.start();
			jButton1.setEnabled(true);
		}catch(Exception e1){
			JOptionPane.showInternalMessageDialog(this, "error:"+e1.toString());
		}
	}
	//发送按钮触发函数
	void jButton2_actionPerformed(ActionEvent e){
		String str="";
		if(Socket1!=null){
			try{
				//从文本输入框获得发送内容
				str=jTextField1.getText()+"\n";
				jTextArea1.append("Forward to Client1:"+str);
				pw.write(str);
				pw.flush();
				jTextField1.setText("");
			}catch(Exception e1){
				//显示错误提示信息
				JOptionPane.showMessageDialog(this, "error:"+e1.toString());
			}
		}
	}
	public static void main(String[] args){
		ServFrame test=new ServFrame();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -