一个hello/hi的简单的网络聊天程序——JAVA

1、方案介绍

应用程序通过使用用于描述IP地址和端口的“套接字”-Socket向网络发出请求或应答网络请求。Socket和ServerSocket类库位于Java.net包中。前者是建立网络连接时使用的,后者则是用于服务端的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例可完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生级别差别。他们的工作是通过SocketImpl类及其之类完成的。

程序包括服务器和客户端。详细原理图如下所示:

2、程序运行

程序运行之前,我们需要知道服务器端主机所在网络的地址,使用cmd查看如下:

 该IPv4地址是172.16.80.88,子网掩码为255.255.255.0,默认网关是172.16.80.254。我们将得到的IP改写入客户端的相应地方即可。打开程序后,服务器处于监听状态。

 服务器端代码

package Server_Client;
import javax.swing.*;
import java.net.*;
import java.lang.*;
import java.awt.event.*;
import java.io.*;

public class Server {
    JTextArea jta=null;
    JTextField jtf=null;
    JButton jb=null;
    JScrollPane jsp=null;
    JPanel jpl=null;
    PrintWriter pw=null;
    public static void main(String[] args) {
        MyServer msv=new MyServer();
    }
    public void MyServer(){
        jta=new JTextArea();
        jtf=new JTextField(20);
        jsp=new JScrollPane(jta);
        jb=new JButton("send");
        jb.addActionListener(this);
        jpl=new JPanel();

        this.add(jsp,"Center");
        jpl.add(jtf);
        jpl.add(jb);
        this.add(jsp,"South");
        this.setTitle("Server");
        this.setSize(400,300);
        this.setVisible(true);
        try{
            ServerSocket ss=new ServerSocket(6666);//服务器监听
            Socket s=ss.accept();
            InputStreamReader isr=new InputStreamReader(s.getInputStream());
            BufferedReader br=new BufferedReader(isr);
            pw=new PrintWriter(s.getOutputStream(),true);
            while(true)
            {
                String info=br.readLine();//读取信息
                jta.append("客户端对服务器说:"+info+"\r\n");
            }
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
    @Override
    public void actionPerformed(ActionEvent e){//如果按下发送按钮
        if(e.getSource()==jb){
            String info=jtf.getText();
            jta.append("服务器对客户端说:"+info+"\r\n");
            pw.println(info);
            jtf.setText("");
        }
    }
}

客户端代码

package Server_Client;
import javax.swing.*;
import java.net.*;
import java.awt.event.*;
import java.io.*;

public class Client {
    JTextArea jta=null;
    JTextField jtf=null;
    JButton jb=null;
    JScrollPane jsp=null;
    JPanel jpl=null;
    PrintWriter pw=null;

    public static void main(String[] args) {
        MyClient met=new MyClient();
    }
    public MyClient()
    {
        jta=new JTextArea();
        jtf=new JTextField(20);
        jsp=new JScrollPane(jta);
        jb=new JButton("send");
        jb.addActionListener(this);
        jpl=new JPanel();
        this.add(jsp,"Center");
        jpl.add(jtf);
        jpl.add(jb);
        this.add(jsp,"South");
        this.setTitle("Client");
        this.setSize(400,300);
        this.setVisible(true);
        try{
            ServerSocket s=new ServerSocket("172.16.80.88",6666);
            InputStreamReader isr=new InputStreamReader(s.getInputStream());
            BufferedReader br=new BufferedReader(isr);
            pw=new PrintWriter(s.getOutputStream(),true);
            while(true)
            {
                String info=br.readLine();//读取从服务器发来的信息
                jta.append("客户端对服务器说:"+info+"\r\n");
            }
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
    @Override
    public void actionPerformed(ActionEvent e){
        if(e.getSource()==jb){
            String info=jtf.getText();
            jta.append("客户端对服务器说:"+info+"\r\n");
            pw.println(info);
        }
    }
}

 运行结果图如下:

 

猜你喜欢

转载自www.cnblogs.com/ai469/p/12013107.html
今日推荐