zoukankan      html  css  js  c++  java
  • 聊天工具小程序

    注:小实验,非完成的作品.


    SERVER端:

    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    import java.net.*;
    
    public class TextEditor {
    	JFrame ft=new JFrame("TextEditor");
    	TextArea ta=new TextArea("",80,60);
    	JTextField tf=new JTextField();
    	BorderLayout bl=new BorderLayout(20,20);
    	
    //	ft.setSize(800,600);
    	JMenuBar mb=new JMenuBar();
    	JMenu m=new JMenu("Menu");
    	JMenuItem mis=new JMenuItem("Save");
    	JMenuItem mie=new JMenuItem("Exit");
    	String str="Great";
    	BufferedReader in;
    	PrintWriter out;
    	
    	void init() {
    	ft.setLayout(bl);
    	Jiant jt=new Jiant(this);
    	Record r=new Record(this);
    	ft.setSize(800,600);
    	mis.addActionListener(jt);
    	mie.addActionListener(jt);
    	ta.addKeyListener(r);
    	tf.setActionCommand("TF");
    	tf.addActionListener(jt);
    	//ta.setAutoscrolls(true);
    	
    	m.add(mis);
    	m.add(mie);
    	mb.add(m);
    
    	ft.add(ta,BorderLayout.CENTER);
    	ft.add(tf,BorderLayout.SOUTH);
    	ft.addWindowListener(r);
    	ft.setJMenuBar(mb);
    	ft.setVisible(true);
    	}
    	
    	public static void main(String args[]) {
    	//	TextEditor te=new TextEditor();
    	TextEditor te=new TextEditor();
    	te.init();	
    	try {
    	ServerSocket ss=new ServerSocket(7777);
    	Socket client=ss.accept();
    	te.in=new BufferedReader(new InputStreamReader(client.getInputStream()));
    	te.out=new PrintWriter(client.getOutputStream(),true);
    	while(true) {
    	te.ta.append("Client says: "+te.in.readLine()+"\n");
    	}
    	} catch (Exception e) {}
    	
    	}
    }
    
    class Jiant implements ActionListener {
    	TextEditor te;
    	Jiant(TextEditor tec) {
    		te=tec;
    	}
    	public void actionPerformed(ActionEvent e) {
    	if((e.getActionCommand()).equals("Save")) {
    	//	Listen to Save
    	//	te.ta.insert("this is a great test",0);
    	try {
    	FileDialog fd=new FileDialog(te.ft,"Select or New file",FileDialog.SAVE);
    	fd.setVisible(true);
    	String fn=fd.getDirectory()+fd.getFile();
    	System.out.println(fn);
    	te.str=te.ta.getText();
    	PrintWriter pw=new PrintWriter(new FileOutputStream(fn,true));
    	pw.print(te.str); 
    	pw.close();} catch (Exception en) {}
    	}
    	
    	if((e.getActionCommand()).equals("Exit")) {
    	//	Listen to Exit
    	//	te.in.close();
    	//	te.out.close();
    		te.ta.insert(te.str,0);
    	}
    	
    	if((e.getActionCommand()).equals("TF")) { //output to client------
    		te.ta.append(te.tf.getText()+"\n");
    		te.out.println(te.tf.getText());
    		te.tf.setText("");	
    	}
    	
    	}
    }
    
    class Record implements KeyListener ,WindowListener{
    	TextEditor te;
    	Record(TextEditor tec) {
    		te=tec;
    	}
    	public void keyPressed(KeyEvent e) {
    		
    	}
    	public void keyReleased(KeyEvent e) {}
    	public void keyTyped(KeyEvent e) {
    	//te.str+=e.getKeyChar();
    	}
    	
    	public void windowClosing(WindowEvent e) {
    		System.exit(0);
    	}
    	public void windowClosed(WindowEvent e){}
    	public void windowIconified(WindowEvent e) {}
    	public void windowDeiconified(WindowEvent e){}
    	public void windowActivated(WindowEvent e){}
    	public void windowDeactivated(WindowEvent e){}
    	public void windowOpened(WindowEvent e) {}
    	
    }

    CLIENT端:

    import java.io.*;
    import java.net.*;
    import java.awt.*;
    import java.awt.event.*;
    
    class NewClient extends Frame implements ActionListener{
    BorderLayout bl=new BorderLayout(20,20);
    TextArea ta=new TextArea();
    TextField tf=new TextField();
    
    private Socket client;
    String serverAddress = "127.0.0.1";
    int port = 7777;
    
    BufferedReader in;
    PrintWriter out;
    NewClient(){
       try{
       setLayout(bl);
       add(ta,BorderLayout.CENTER);
       add(tf,BorderLayout.SOUTH);
       tf.addActionListener(this);
       setVisible(true);
        client = new Socket(serverAddress,port);
    	String check;
      //  BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
    	in=new BufferedReader(new InputStreamReader(client.getInputStream()));
        out = new PrintWriter(client.getOutputStream(),true);
    	while(true) {
    //	check=sin.readLine();
    //    out.println("Client says: "+sin.readLine() + "/n");	
    	check=in.readLine();
    	if(check.equals("exit")) break;
        ta.append("Message from server: " + check+"\n");
       }
        in.close();
        out.close();
        client.close();
    	
       }catch(Exception e){
        e.printStackTrace();
       }
    }
    
    public static void main(String[] args){
       new NewClient();
    }
    
    public void actionPerformed(ActionEvent e) {
    	String str=tf.getText();
    	ta.append(str+"\n");
    	out.println(str);
    	tf.setText("");
    }
    } 

    收获:之前都是用命令行写server端和client端,只能实现你说一句我说一句的阻塞式交流.

    今天的聊天工具加入了图形界面.同时在main函数中,让输入端一直从管道监听,对方只要有输入就写到TEXTAREA中去. 然后用时间监听

    TEXTFIELD,巧回车就将textField中的数据写出. 这样将输入输出分开在不同模块...使输入输出不再相互阻塞...这个就实现了我们像QQ一样的聊天.




  • 相关阅读:
    poj 3528 (三维几何求凸包+凸包表面积)
    dijkstra模板(好像是斐波那契额堆优化,但我为什么看起来像优先队列优化,和spfa一样)
    最大空凸包模板
    ICPC 2017–2018, NEERC, Northern Subregional Contest St Petersburg, November 4, 2017 I题
    hdu 5248 序列变换
    hdu 2063(二分图模板测试)
    组合数
    85. Maximal Rectangle 由1拼出的最大矩形
    750. Number Of Corner Rectangles四周是点的矩形个数
    801. Minimum Swaps To Make Sequences Increasing 为使两个数组严格递增,所需要的最小交换次数
  • 原文地址:https://www.cnblogs.com/jackhub/p/3147248.html
Copyright © 2011-2022 走看看