博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聊天项目
阅读量:5976 次
发布时间:2019-06-20

本文共 12461 字,大约阅读时间需要 41 分钟。

  在马士兵的聊天项目中,有很多细节我们需要了解清楚,编程最重要的是思想,在学习过程中一定要知道步骤:

1,建立一个窗口。用Frame类里的方法建立。程序如下:

import java.awt.*;public class ChatClient extends Frame {        public static void main(String[] args) {                    new ChatClient().launchFrame();        }    public void launchFrame(){        setLocation(400,300);        this.setSize(300, 300);        setVisible(true);    }}

2,、建立窗口体,使用

TextField tfTxt=new TextField();

TextArea ta=new TextArea();

建立对象。再添加对象位置。程序如下:

import java.awt.*;public class ChatClient extends Frame {        TextField tfTxt=new TextField();    TextArea ta=new TextArea();    public static void main(String[] args) {                    new ChatClient().launchFrame();            }    public void launchFrame(){        setLocation(400,300);        this.setSize(300, 300);        add(tfTxt,BorderLayout.SOUTH);        add(ta,BorderLayout.NORTH);        pack();        setVisible(true);    }}

 3,添加事件处理,使用事件处理来使窗口可以退出,对于其中的方法要了解并且会使用,会用每一个方法是最关键的。程序如下:

import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.*;public class ChatClient extends Frame {        TextField tfTxt=new TextField();    TextArea ta=new TextArea();    public static void main(String[] args) {            new ChatClient().launchFrame();            }    public void launchFrame(){        setLocation(400,300);        this.setSize(300, 300);        add(tfTxt,BorderLayout.SOUTH);        add(ta,BorderLayout.NORTH);        pack();        this.addWindowListener(new WindowAdapter() {
//addWindowListener添加指定的窗口焦点侦听器,以从此窗口接收窗口事件 @Override public void windowClosing(WindowEvent arg0) {
//windowClosing窗口正处在关闭过程中时调用, System.exit(0); } }); setVisible(true); }}

4,实现聊天打字按回车能够消失输入框里的内容,用这个getText()和setTest()方法实现。程序如下:

import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.*;public class ChatClient extends Frame {        TextField tfTxt=new TextField();    TextArea ta=new TextArea();    public static void main(String[] args) {            new ChatClient().launchFrame();            }    public void launchFrame(){        setLocation(400,300);        this.setSize(300, 300);        add(tfTxt,BorderLayout.SOUTH);        add(ta,BorderLayout.NORTH);        pack();        this.addWindowListener(new WindowAdapter() {
//addWindowListener添加指定的窗口焦点侦听器,以从此窗口接收窗口事件 @Override public void windowClosing(WindowEvent arg0) {
//windowClosing窗口正处在关闭过程中时调用, System.exit(0); } }); tfTxt.addActionListener(new TFListtener()); //public void addActionListener(ActionListener l) //添加指定的操作侦听器,以从此文本字段接收操作事件。如果 l 为 null,则不抛出任何异常,也不执行任何操作。 setVisible(true); } private class TFListtener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { String s=tfTxt.getText().trim();//getText()返回此文本组件表示的文本。默认情况下,此文本是一个空字符串。 ta.setText(s);//将此文本组件显示的文本设置为指定文本 tfTxt.setText(""); } }}

5.实现客户端的连接,首先建立客户端,引入java.net.*;包。具体程序如下:

import java.io.IOException;import java.net.*;public class ChatServer {    public static void main(String[] args) {                try {            ServerSocket ss=new ServerSocket(8888);//创建绑定到特定端口的服务器套接字            while(true){                Socket s=ss.accept();//侦听并接受到此套接字的连接。                System.out.println("a client connercted ");            }        } catch (IOException e) {                        e.printStackTrace();        }    }}

6,建立服务器端与客户端的连接,具体程序如下:

import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.IOException;import java.util.*;import java.net.*;public class ChatClient extends Frame {        TextField tfTxt=new TextField();    TextArea ta=new TextArea();    public static void main(String[] args) {            new ChatClient().launchFrame();        }    public void launchFrame(){        setLocation(400,300);        this.setSize(300, 300);        add(tfTxt,BorderLayout.SOUTH);        add(ta,BorderLayout.NORTH);        pack();        this.addWindowListener(new WindowAdapter() {
//addWindowListener添加指定的窗口焦点侦听器,以从此窗口接收窗口事件 @Override public void windowClosing(WindowEvent arg0) {
//windowClosing窗口正处在关闭过程中时调用, System.exit(0); } }); tfTxt.addActionListener(new TFListtener()); //public void addActionListener(ActionListener l) //添加指定的操作侦听器,以从此文本字段接收操作事件。如果 l 为 null,则不抛出任何异常,也不执行任何操作。 setVisible(true); connect(); } public void connect(){ try { //public Socket(InetAddress address, //int port) //throws IOException创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 Socket s=new Socket("127.0.0.1",8888); System.out.println("connected"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private class TFListtener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { String s=tfTxt.getText().trim();//getText()返回此文本组件表示的文本。默认情况下,此文本是一个空字符串。 ta.setText(s);//将此文本组件显示的文本设置为指定文本 tfTxt.setText(""); } }}

7.在客户端输入,在服务器端也能接收到信息。具体程序如下:

import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataOutputStream;import java.io.IOException;import java.util.*;import java.net.*;public class ChatClient extends Frame {        Socket s=null;        TextField tfTxt=new TextField();    TextArea ta=new TextArea();    public static void main(String[] args) {            new ChatClient().launchFrame();        }    public void launchFrame(){        setLocation(400,300);        this.setSize(300, 300);        add(tfTxt,BorderLayout.SOUTH);        add(ta,BorderLayout.NORTH);        pack();        this.addWindowListener(new WindowAdapter() {            //addWindowListener添加指定的窗口焦点侦听器,以从此窗口接收窗口事件            @Override            public void windowClosing(WindowEvent arg0) {
//windowClosing窗口正处在关闭过程中时调用, System.exit(0); } }); tfTxt.addActionListener(new TFListtener()); //public void addActionListener(ActionListener l) //添加指定的操作侦听器,以从此文本字段接收操作事件。如果 l 为 null,则不抛出任何异常,也不执行任何操作。 setVisible(true); connect(); } public void connect(){ try { //public Socket(InetAddress address, //int port) //throws IOException创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 s=new Socket("127.0.0.1",8888); System.out.println("connected"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private class TFListtener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { String str=tfTxt.getText().trim();//getText()返回此文本组件表示的文本。默认情况下,此文本是一个空字符串。 ta.setText(str);//将此文本组件显示的文本设置为指定文本 tfTxt.setText(""); try { System.out.println(s); DataOutputStream dos=new DataOutputStream(s.getOutputStream()); dos.writeUTF(str); dos.flush(); dos.close(); } catch (IOException e1) { e1.printStackTrace(); } } }}
import java.io.DataInputStream;import java.io.IOException;import java.io.ObjectInputStream.GetField;import java.net.*;@SuppressWarnings("unused")public class ChatServer {    public static void main(String[] args) {                try {            ServerSocket ss=new ServerSocket(8888);//创建绑定到特定端口的服务器套接字            while(true){                Socket s=ss.accept();//侦听并接受到此套接字的连接。                System.out.println("a client connercted ");                DataInputStream dis=new DataInputStream(s.getInputStream());                String str=dis.readUTF();                System.out.println(str);                dis.close();            }        } catch (IOException e) {                        e.printStackTrace();        }    }}

8,、建立服务器端与客服端的连接,并且可以连续输入内容和接收内容,程序如下:

import java.io.DataInputStream;import java.io.IOException;import java.io.ObjectInputStream.GetField;import java.net.*;@SuppressWarnings("unused")public class ChatServer {        public static void main(String[] args) {        boolean started =false;        try {            ServerSocket ss=new ServerSocket(8888);//创建绑定到特定端口的服务器套接字            started=true;            while(started){                boolean bConnected=false;                Socket s=ss.accept();//侦听并接受到此套接字的连接。                System.out.println("a client connercted ");                bConnected=true;                DataInputStream dis=new DataInputStream(s.getInputStream());                while(bConnected){                    String str=dis.readUTF();                    System.out.println(str);                }                 dis.close();            }        } catch (IOException e) {                        e.printStackTrace();         }    }}
import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataOutputStream;import java.io.IOException;import java.util.*;import java.net.*;public class ChatClient extends Frame {        Socket s=null;    DataOutputStream dos=null;        TextField tfTxt=new TextField();    TextArea ta=new TextArea();    public static void main(String[] args) {            new ChatClient().launchFrame();        }    public void launchFrame(){        setLocation(400,300);        this.setSize(300, 300);        add(tfTxt,BorderLayout.SOUTH);        add(ta,BorderLayout.NORTH);        pack();        this.addWindowListener(new WindowAdapter() {            //addWindowListener添加指定的窗口焦点侦听器,以从此窗口接收窗口事件            @Override            public void windowClosing(WindowEvent arg0) {
//windowClosing窗口正处在关闭过程中时调用, disconnect(); System.exit(0); } }); tfTxt.addActionListener(new TFListtener()); //public void addActionListener(ActionListener l) //添加指定的操作侦听器,以从此文本字段接收操作事件。如果 l 为 null,则不抛出任何异常,也不执行任何操作。 setVisible(true); connect(); } public void connect(){ try { //public Socket(InetAddress address, //int port) //throws IOException创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 s=new Socket("127.0.0.1",8888); dos=new DataOutputStream(s.getOutputStream()); System.out.println("connected"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void disconnect(){ try { dos.close(); s.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private class TFListtener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { String str=tfTxt.getText().trim();//getText()返回此文本组件表示的文本。默认情况下,此文本是一个空字符串。 ta.setText(str);//将此文本组件显示的文本设置为指定文本 tfTxt.setText(""); try { System.out.println(s); //DataOutputStream dos=new DataOutputStream(s.getOutputStream()); dos.writeUTF(str); dos.flush(); //dos.close(); } catch (IOException e1) { e1.printStackTrace(); } } }}

 

转载于:https://www.cnblogs.com/tangdeqiang/p/7605469.html

你可能感兴趣的文章
opencv+python机读卡识别(四)百度API进行数字识别
查看>>
算法踩坑6-二叉搜索树排序
查看>>
GCD的基本使用
查看>>
不忘初心 砥砺前行-智和信通2018年年会报道
查看>>
COCOA的UIVIEW动画护展
查看>>
Android Studio: finished with non-zero exit value2
查看>>
5. Longest Palindromic Substring
查看>>
initWithNibName/awakeFromNib/initWithCoder
查看>>
Dubbo实现RPC调用使用入门
查看>>
乐观锁、悲观锁简单分析,回忆旧(新)知识...
查看>>
addcolumn---Grid---Magento
查看>>
逐行分析Hadoop的HelloWorld
查看>>
ubuntu下的win交叉编译
查看>>
SVG(网页加载显示的加载进度动态图)
查看>>
openSUSE install albertlauncher from source files
查看>>
nginx模块学习六 add_header 跨域访问
查看>>
Java并发编程:AbstractQueuedSynchronizer的内部结构
查看>>
Could not find artifact com.sun:tools:jar:1.5.0 解决办法
查看>>
神经网络---Hessian矩阵
查看>>
TreeMap之floorKey
查看>>