📄 servframe.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 + -