Java之聊天网络程序

实验七 聊天网络程序设计实验

一、实验目的

练习基于Socket的网络访问方法,理解TCP/IP传输层网络程序的设计思想与实现方法。

二、实验内容

设计通过网络进行聊天的Java应用程序,实现如下功能:

(1)聊天两端具有相同的界面,包括能输入消息的文本框、发送消息按钮、消息列表文本框;

(2)任意一端均可以实时发送和接收消息,并在自身的消息列表中显示消息记录。三、实验设计

(反映设计原理、设计方法、设计过程、设计结果)

1:首先要完成这项设计需要两个端口,客户端和服务器端,在这里面设计两个端口,写代码。

Java之聊天网络程序_第1张图片

2:在用户端口上设计用户界面,这里首先需要一个文本框,来输入传输的内容,然后点击“发送消息”,客户端程序需要界面,服务器端只起到连接客户和转发信息的作用,因此不需要界面。

Java之聊天网络程序_第2张图片

3:然后设置服务器端,设置服务器地址信息,并将监听端口绑定到这个地址上。

Java之聊天网络程序_第3张图片

4:编写代码,进行客户端与服务器端连接。这样就实现了整个设计过程

四、实验过程

(反映实验的基本过程,重点体现实验中遇到的问题和解决方案)

1:客户端的实现,将文本框中的信息,通过点击“发送信息”按钮,启动监听功能,发送到服务器端,服务器端接受信息,并且将另外的信息返回到用户端,实现用户端与服务器端的信息交流。

客户端实现过程:

 

Java之聊天网络程序_第4张图片

 

 

 

 

 

服务期端的连接 实现:

Java之聊天网络程序_第5张图片

五、实验结果

1:先启动服务器,直接点击运行服务器端口的代码就行。

Java之聊天网络程序_第6张图片

2:然后运行客户端,如果连接成功就会出现客户端的界面并且显示连接成功,在显示结果的地方。

Java之聊天网络程序_第7张图片

3:在客户端的文本框中输入想要发送的内容,任意输入都可以。

Java之聊天网络程序_第8张图片

4:点击“发送消息”。就会出现在客户端里面,这样就完后曾了整个聊天过程。

Java之聊天网络程序_第9张图片

 

 

 

 

七、附录:关键代码(给出适当注释,可读性高)

package exam7;

 

import java.awt.EventQueue;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

 

import javax.swing.JFrame;

import javax.swing.JTextArea;

 

 

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

 

public class ChatClient {

 

    private JFrame frame;

    static JTextArea txt_accept;

 

 

    /**

     * Launch the application.

     */

    public static void main(String[] args) {

          

       

        EventQueue.invokeLater(new Runnable() {

           public void run() {

               try {

                   ChatClient window = new ChatClient();

                   window.frame.setVisible(true);

               } catch (Exception e) {

                   e.printStackTrace();

               }

           }

        });

        try {

           Socket socket = new Socket("127.0.0.1",8080);//连接端口

           System.out.println("Connection Succeed");

           InputStream is = socket.getInputStream();

           DataInputStream dis = new DataInputStream(is);

           while(true) {

               String s= dis.readUTF();

               txt_accept.setText(s);

           }

        } catch (UnknownHostException e1) {

           // TODO Auto-generated catch block

           System.out.println("UnkonwHostException...");

        } catch (IOException e1) {

           // TODO Auto-generated catch block

           System.out.println("IOException...");

        }

    }

 

    /**

     * Create the application.

     */

    public ChatClient() {

        initialize();

    }

 

    /**

     * Initialize the contents of the frame.

     */

    private void initialize() {

        frame = new JFrame();

        frame.setBounds(100, 100, 450, 300);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().setLayout(null);

       

        JTextArea txt_send = new JTextArea();

        txt_send.setBounds(27, 28, 195, 56);

        frame.getContentPane().add(txt_send);

       

        JButton btnSendMessage = new JButton("\u53D1\u9001\u6D88\u606F");

        btnSendMessage.addActionListener(new ActionListener() {

           public void actionPerformed(ActionEvent e) {

              

           }

        });

        btnSendMessage.setBounds(261, 28, 167, 48);

        frame.getContentPane().add(btnSendMessage);

       

        txt_accept = new JTextArea();

        txt_accept.setBounds(29, 121, 340, 120);

        frame.getContentPane().add(txt_accept);

    }

 

}

package exam7;

 

import java.awt.EventQueue;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

 

import javax.swing.JFrame;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import javax.swing.JTextArea;

 

public class ChatServer {

 

    private JFrame frame;

    static Socket socket ;

    JTextArea txt_Send;

    private JTextArea textArea;

 

    /**

     * Launch the application.

     */

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

           public void run() {

               try {

                   ChatServer window = new ChatServer();

                   window.frame.setVisible(true);

               } catch (Exception e) {

                   e.printStackTrace();

               }

           }

        });

        try {

           ServerSocket ss = new ServerSocket(8080);

           socket = ss.accept();

           System.out.println("Host Connected");

        } catch (IOException e1) {

           // TODO Auto-generated catch block

           e1.printStackTrace();

        }

    }

 

    /**

     * Create the application.

     */

    public ChatServer() {

        initialize();

    }

 

    /**

     * Initialize the contents of the frame.

     */

    private void initialize() {

        frame = new JFrame();

        frame.setBounds(100, 100, 450, 300);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().setLayout(null);

       

        JButton btnSendMessage = new JButton("\u53D1\u9001\u6D88\u606F");

        btnSendMessage.addActionListener(new ActionListener() {

           public void actionPerformed(ActionEvent arg0) {

               String s = txt_Send.getText();

               try {

                   OutputStream os = socket.getOutputStream();

                   DataOutputStream dos = new DataOutputStream(os);

                   dos.writeUTF(s);

               } catch (IOException e) {

                   // TODO Auto-generated catch block

                   e.printStackTrace();

               }

           }

        });

        btnSendMessage.setBounds(267, 40, 129, 48);

        frame.getContentPane().add(btnSendMessage);

       

        txt_Send = new JTextArea();

        txt_Send.setBounds(32, 35, 223, 58);

        frame.getContentPane().add(txt_Send);

       

        textArea = new JTextArea();

        textArea.setBounds(32, 136, 328, 103);

        frame.getContentPane().add(textArea);

    }

}

 

 

注:每个部分根据情况可以再分子标题,前提是层次清晰、逻辑性强。

 

 

 

 

 

你可能感兴趣的:(Java之聊天网络程序)