java 界面编程用socket实现服务端与客户端的循环通信。

服务端:

package 实验五聊天;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;

import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class 服务端 extends JFrame implements  Runnable {

    private JPanel contentPane;
    private JTextField textField;
    private  static JTextArea BtextArea;
    public static ServerSocket serverSocket=null;
    public static Socket clientSocket=null;
    //public static PrintWriter out=null;
    public static DataOutputStream out=null;
    public static DataInputStream in=null;
        public void run()//接收信息
        {
            try
            {
                while(true)
                {
                    if(in!=null)
                        {
                            String tmp=in.readUTF();
                            BtextArea.append("\n客户端:\n"+tmp);
                        }
                }
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    private Thread thread;
    public void connect()
    {
        try
        {
            serverSocket =new ServerSocket(8000);
            clientSocket=serverSocket.accept();
            in=new DataInputStream(clientSocket.getInputStream());
            out=new DataOutputStream(clientSocket.getOutputStream());
            System.out.println("链接成功");
            if (!(thread.isAlive())) {
                thread = new Thread(this);
            }
            thread.start();
        }
        catch(Exception e)
        {
            System.out.println("连接失败");
            e.printStackTrace();
        }

    }
    public void send()
    {
        try
        {
            String tmp=textField.getText();
            textField.setText("");
            if(tmp.isEmpty())
            {
                JOptionPane.showMessageDialog(this, "请输入信息");
                return;
            }
            BtextArea.append("\n服务端:\n"+tmp);
                 if(out!=null)
                     {
                         out.writeUTF(tmp);
                     }
                 else
                 {
                     System.out.println("链接未建立");
                 }
        }
        catch(Exception e1)
        {
            e1.printStackTrace();
        }
    }
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    服务端 frame = new 服务端();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public 服务端() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("服务端");
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JTextArea textArea = new JTextArea();
        BtextArea =textArea;
        textArea.setBounds(0, 15, 300, 137);
        //contentPane.add(textArea);
        JScrollPane jsp = new JScrollPane(textArea); //在文本框上添加滚动条
        jsp.setBounds(0, 15, 350, 100);
        //默认的设置是超过文本框才会显示滚动条,以下设置让滚动条一直显示
         jsp.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        contentPane.add(jsp);
        textField = new JTextField();
        textField.setBounds(0, 167, 287, 62);
        contentPane.add(textField);
        textField.setColumns(10);

        JButton button = new JButton("\u53D1\u9001");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                send();
            }
            });
        button.setBounds(302, 200, 123, 29);
        contentPane.add(button);

        JButton button_1 = new JButton("\u5F00\u59CB\u670D\u52A1");
        button_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                connect();
            }
        });
        button_1.setBounds(302, 147, 123, 29);
        contentPane.add(button_1);
        thread=new Thread(this);
        //thread.run();
    }
}

客户端:

package 实验五聊天;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;

import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.AbstractAction;
import java.awt.event.ActionEvent;
import javax.swing.Action;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class 客户端 extends JFrame implements  Runnable{

    private JPanel contentPane;
    private JTextField textField;
    private JButton button;
    private  static JTextArea BtextArea;
    public static ServerSocket serverSocket=null;
    public static Socket clientSocket=null;
    public  Socket client=null;
    public DataOutputStream out=null;
    public static DataInputStream in=null;
    private Thread thread;
    public void run()
        {
            try
            {
                while(true)
                {        

                    if(in!=null)
                        {
                            String tmp=in.readUTF();
                            BtextArea.append("\n服务端:\n"+tmp);
                        }
                }

            }catch (Exception e) {
                e.printStackTrace();
            }
        }

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    客户端 frame = new 客户端();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    //frame.setTitle("客户端");
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    public void  connect()
    {
            InetAddress localIP=null;
            try {
                if(client==null)
                {
                    localIP = InetAddress.getLocalHost();
                    client=new Socket(localIP,8000);
                    out=new DataOutputStream(client.getOutputStream());
                    in=new DataInputStream(client.getInputStream());
                    if(!(thread.isAlive()))
                    {
                        thread=new Thread(this);
                    }
                    thread.start();
                }
            } catch (UnknownHostException   e2) {
                // TODO 自动生成的 catch 块
                e2.printStackTrace();
            }
            catch(IOException e2)
            {
                e2.printStackTrace();
            }
    }
    /**
     * Create the frame.
     */
    public 客户端() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        setTitle("客户端");
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        JTextArea textArea = new JTextArea();
        textArea.setBounds(0, 0, 299, 132);
        BtextArea=textArea;
        JScrollPane jsp = new JScrollPane(textArea); //在文本框上添加滚动条
        jsp.setBounds(0, 15, 350, 100);
        //默认的设置是超过文本框才会显示滚动条,以下设置让滚动条一直显示
         jsp.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        contentPane.add(jsp);

        textField = new JTextField();
        textField.setBounds(10, 127, 257, 102);
        contentPane.add(textField);
        textField.setColumns(10);

        button = new JButton("\u53D1\u9001");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                 String tmp=textField.getText();
                 textField.setText("");
                 BtextArea.append("\n客户端:"+tmp);
                 try
                 {
                     out.writeUTF(tmp);
                 }
                 catch(Exception e1)
                 {
                     e1.printStackTrace();
                 }
            }
        });
        button.setBounds(282, 185, 123, 29);
        contentPane.add(button);

        JButton button_1 = new JButton("\u8FDE\u63A5");
        button_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                connect();
            }
        });
        button_1.setBounds(282, 130, 123, 29);
        contentPane.add(button_1);
        thread=new Thread(this);
    }
}

实现效果:

原文地址:https://www.cnblogs.com/lhclqslove/p/9190235.html

时间: 2024-10-10 02:25:13

java 界面编程用socket实现服务端与客户端的循环通信。的相关文章

[C语言]一个很实用的服务端和客户端进行TCP通信的实例

本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件client.c,内容如下: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <

java中socket创建服务端与客户端即时对聊

package tool; 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; impo

11.网络编程:socket、服务端、客户端

socket: socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. python中使用socket来进行网络连接传输 由图可知: socket中客户端需要进行的操作是:建立,连接,传输数据 ,接收数据,关闭连接 服务端需要进行的操作是:建立,绑定IP地址和端口,等待连接,接收数据,传输数据 ,关闭连接 服务端: 建立:socket.socket() 绑定端口:bind(('IP地址',端口)),其中地址和端口号是一个 tuple

使用socket模拟服务端与客户端传输文件

package netFile; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.Socket; public class SocketTask { //客

Cocos2dx3.x使用socket创建服务端和客户端改进

由于一个网友使用笔者写的SocketClient作为游戏客户端网络数据接收类,出现了一些问题 这个问题就是因为当执行onRecv时创建了一个Sprite(Sprite::create("1.png")),而创建完成后sprite的数据混乱,或者MoveTo时返回的也是混乱数据.原因在于在多线程申请内存,在主线程使用就会出现问题.为了解决这个问题,特意看了cocos2dx的WebSocket的实现方式,发现当接收到数据时并不是立即调用回调函数,而是将数据信息加入到消息队列,当主线程更新时

socket创建服务端和客户端

看情况选择相对应的套接字*面向连接的传输--tcp协议--可靠的--流式套接字(SOCK_STREAM)*面向无连接的传输--udp协议--不可靠的--数据报套接字(SOCK_DGRAM) 在liunx中  telnet ip port 可以当成临时客服端 服务端示例: 创建服务端示例: from socket import * #创建套接字(参数:地址族类型,套接字类型,选定子协议类型) sockfd = socket(AF_INET,SOCK_STREAM,proto = 0) #绑定地址(

[C语言]一个很实用的服务端和客户端进行UDP通信的实例

前段时间发了个TCP通信的例子,现在再来一个UDP通信的例子.这些可以作为样本程序,用到开发中.“裸写”socket老是记不住步骤,经常被鄙视…… 下面的例子很简单,写一个UDP的server用于收包,写一个UDP的client用于发包并接收来自server的回复.其中UDP的client写了两个,一个是不需要connect的,另一个是带上connect的,两个client实现的功能是一样的.从效率上,带上connect的UDP肯定效率稍微高一些.不过UDP的connect和TCP里面非常不一样

Java网络编程【Socket服务端和客户端】

Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一.Java 网络编程又包括 TCP.UDP,URL 等模块.TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块.URL 对应 URL 模块.其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议.两者之间的异同就不在这里说了,推荐一本入门书籍 <TCPIP入门经典>.我们开始 Socket 服务端和客户端编程吧. 一.Socket 服

socket编程,简单多线程服务端测试程序

socket编程,简单多线程服务端测试程序 前些天重温了MSDN关于socket编程的WSAStartup.WSACleanup.socket.closesocket.bind.listen.accept.recv.send等函数的介绍,今天写了一个CUI界面的测试程序(依赖MFC)作为补充.程序功能简介如下: 1:一个线程做监听用. 2:监听线程收到客户端连接后,创建新线程接收客户端数据.所有对客户端线程将加入容器,以便管理. 3:服务端打印所有客户端发来的信息. 4:服务端CUI界面输入数字