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一样的聊天.




  • 相关阅读:
    中文乱码总结之web乱码情景
    微信小程序实现navbar导航栏
    boostrap table接收到后台返回的数据格式不一致的解决方法
    bootstrap让footer固定在顶部和底部
    在vue中让某个组件重新渲染的笨方法
    网页打印事件的监听
    关于JavaScript的词法作用域及变量提升的个人理解
    函数节流之debounce
    HTML5 a标签的down属性进行图片下载
    Jquery的深浅拷贝涉及到的知识点
  • 原文地址:https://www.cnblogs.com/jackhub/p/3147248.html
Copyright © 2011-2022 走看看