美文网首页
Java 网络编程二---防QQ简单聊天

Java 网络编程二---防QQ简单聊天

作者: Yanci516 | 来源:发表于2016-05-06 23:41 被阅读189次

更详细网络知识请点击这里


话不多说先看两张截图


直接粘代码

服务器端

package com.fy.tcp_socket;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

public class MyServer extends JFrame implements Runnable{
    private ServerSocket serverSocket;
    private Socket socket;
    private BufferedReader br;
    private PrintWriter writer;
    private JTextArea ta = new JTextArea();
    private JTextField tf = new JTextField();
    Container cc;

    public MyServer(String title) {
        super(title);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        cc = this.getContentPane();

        final JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
        getContentPane().add(scrollPane, BorderLayout.CENTER);
        scrollPane.setViewportView(ta);
        cc.add(tf, "South");

        tf.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                writer.println(tf.getText());
                ta.append("我说(服务器):" + tf.getText() + '\n');
                ta.setSelectionEnd(ta.getText().length());
                tf.setText("");
            }
        });
    }

    public void getServer() {
        try {
            serverSocket = new ServerSocket(6666);
            ta.append("服务器开启成功\n");
            ta.append("等待客户端连接\n");
            while (true) {
                socket = serverSocket.accept();
                sendClientMessage();// 发消息一定要先收消息前声明
                getClientMessage();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void getClientMessage() {
        try {
            br = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
            while (true) {
                ta.append("客户端说:" + br.readLine() + '\n');
                ta.setSelectionEnd(ta.getText().length());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            if (br != null) {
                br.close();
            }
            if (writer != null) {
                writer.close();
            }
            if (socket != null) {
                socket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void sendClientMessage() {
        try {
            writer = new PrintWriter(socket.getOutputStream(), true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        MyServer server = new MyServer("Server");
        server.setSize(300, 300);
        server.setVisible(true);
        server.getServer();
    }

    @Override
    public void run() {
        
    }

}

客户端

package com.fy.tcp_socket;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

import javax.swing.*;
import javax.swing.border.*;

public class MyClient extends JFrame {

    private static final long serialVersionUID = 1L;
    private PrintWriter writer;
    private BufferedReader br;
    Socket socket;
    private JTextArea ta = new JTextArea();
    private JTextField tf = new JTextField();
    Container cc;

    public MyClient(String title) {
        super(title);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        cc = this.getContentPane();

        final JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
        getContentPane().add(scrollPane, BorderLayout.CENTER);
        scrollPane.setViewportView(ta);
        cc.add(tf, "South");
        tf.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                writer.println(tf.getText());

                ta.append("我说(客户端):" + tf.getText() + '\n');
                ta.setSelectionEnd(ta.getText().length());
                tf.setText("");
            }
        });
    }

    private void connect() {
        ta.append("尝试连接\n");
        try {
            socket = new Socket("localhost", 6666);
            writer = new PrintWriter(socket.getOutputStream(), true);
            ta.append("完成连接\n");
            br = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
            getServerMessage();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void getServerMessage() {
        try {
            while (true) {
                ta.append("服务器说:"+br.readLine()+'\n');
                ta.setSelectionEnd(ta.getText().length());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }try {
            if (br != null) {
                br.close();
            }
            if (writer != null) {
                writer.close();
            }
            if (socket != null) {
                socket.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        MyClient client1 = new MyClient("Client");
        client1.setSize(300,300);
        client1.setVisible(true);
        client1.connect();
    }
}

相关文章

  • Java 网络编程二---防QQ简单聊天

    更详细网络知识请点击这里 话不多说先看两张截图 直接粘代码 服务器端 客户端

  • 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发

    QQ_Chat 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具。(内含报告) ...

  • 用Java语言实现QQ部分聊天功能

    目的 通过之前学习了Java语言中的网络编程,今天就来实现QQ内部的相应聊天功能(群聊、登录功能、群聊) 相关技术...

  • 4月5日TestServerSocket

    于2017/4/5复习学习的java - Socket网络编程. 本次完成的是网络聊天编程功能(没有GUI).我想...

  • 2018-03-11

    网络聊天室(MFC编程) 本应用是一款简单的模拟qq聊天应用.主要分为服务器端与客户端 服务器select端: 客...

  • Java网络编程(第四版) PDF 超清版

    《Java网络编程(第四版)》是一本关于Java编程相关的电子书资源,介绍了关于Java、网络编程、Java编程方...

  • 简单聊天室

    一、实验内容 实现一个简单的聊天程序,要求能多人在线聊天。 二、实验目的 1、熟悉网络编程的基本知识,掌握 Soc...

  • 2018-2019 目标技术栈

    一、java基础 1.Java 集合 2.Java 线程 3.Java io变成 4.Java 网络编程 二、my...

  • Java Socket编程(网络编程)

    一、Socket概要   Java的网络编程主要涉及到的内容是Socket编程,那么什么是Socket呢?简单地说...

  • Java并发编程

    Java并发编程 来自Java并发编程的艺术个人博客: http://blog.csdn.net/qq_22329...

网友评论

      本文标题:Java 网络编程二---防QQ简单聊天

      本文链接:https://www.haomeiwen.com/subject/cqijrttx.html