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

一、实验目的

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

二、实验内容

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

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

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

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

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

用java写简单聊天程序 java编写网络聊天程序_java

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

用java写简单聊天程序 java编写网络聊天程序_用java写简单聊天程序_02

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

用java写简单聊天程序 java编写网络聊天程序_客户端_03

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

四、实验过程

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

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

客户端实现过程:

 

用java写简单聊天程序 java编写网络聊天程序_服务器端_04

 

 

 

 

 

服务期端的连接 实现:

用java写简单聊天程序 java编写网络聊天程序_客户端_05

五、实验结果

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

用java写简单聊天程序 java编写网络聊天程序_客户端_06

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

用java写简单聊天程序 java编写网络聊天程序_java_07

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

用java写简单聊天程序 java编写网络聊天程序_java_08

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

用java写简单聊天程序 java编写网络聊天程序_客户端_09

 

 

 

 

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

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);
    }
}

 

 

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