Java——基于GUI的网络通信程序设计【强迫症版本】

基于GUI的网络通信程序设计 JAVA源代码(client) 基于GUI的网络通信程序设计 JAVA源代码 (client部分) 立即下载

一、实验目的

1.掌握Java中GUI程序的编写,包括事件监听机制。

2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。

3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。

4.掌握用面向对象的方法分析和解决复杂问题。

二、实验原理

1.使用面向对象的设计方法设计程序

2.通过继承JFrame类实现图形化界面

3.通过事件监听器实现按钮点击监听与触发事件

4.利用ServerSocket和Socket类实现网络通信

5.利用多线程技术实现同时读入数据与发送数据

三、使用硬件、软件环境

硬件环境:PC计算机一台,配置CPU为Intel(R)Core(TM)i7-8565U CPU @1.80Ghz内存为8.0GB,硬盘256G+1T(机械硬盘),安装系统为Windows10操作系统。
软件环境:IDEA,JDK12.0

四、实验过程

在这里插入图片描述
①服务器:

//Author:Sherlock Novitch in Hfut
// -*- codeing=utf-8 -*-
// @time:2020/10/19 15:14
// @File:ServerFrame.java
// @Software:IDEA
// @blog:https://blog.youkuaiyun.com/RealCoder

package experiment2;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;

public class ServerFrame extends JFrame {
    private JTextField text1,text2; //text1为端口号文本栏,text2为消息输入栏
    private JTextArea text;         //消息显示区
    private JButton button1,button2; //button1对应start,button2对应say
    private ServerSocket server;    //服务器套接字
    private Socket sc;              //与客户端建立联系的套接字
    private DataInputStream in;     //客户端到服务器的输入流
    private DataOutputStream out;   //服务器到客户端的输出流
    private ReadThread readThread;  //负责读入信息的线程
    private myactionlistenr ac;   //监听两个按钮的监听器
    private ServerFrame(){          //构造方法
        setLayout(new FlowLayout()); //窗体容器整体布局设置为FlowLayout
        GUIinit();                     //调用组件初始化方法
        eventinit();               //调用事件监听器初始化方法
        setVisible(true);         //设置可视
        setResizable(false);      //设置不可更改大小
        setDefaultCloseOperation(EXIT_ON_CLOSE); //在关闭窗体时,程序终止

    }
    private void GUIinit(){
        setTitle("服务器");    //设置标题
        setBounds(100,250,500,300);  //位置与大小
        Box boxH1=Box.createHorizontalBox(); //创建水平盒式容器,后续依次从左到右添加"Port:",text1,button1;
        Box boxH2=Box.createHorizontalBox(); //创建水平盒式容器,后续依次从左到右添加"Say: ",text2,button2;
        Box boxV=Box.createVerticalBox();  //创建垂直盒式容器,后续依次从垂直方向从上向下添加"服务器设置:",boxH1,boxH2
        //1°开始添加“服务器设置:”标签至boxV
        Box temp=Box.createHorizontalBox();
        temp.add(new JLabel("服务器设置:"));
        temp.add(Box.createHorizontalStrut(400)); //添加水平支撑(类似Qt中的弹簧)
        boxV.add(temp);
        boxV.add(Box.createVerticalStrut(5));//添加垂直支撑(类似Qt中的弹簧)
        //2°开始填装boxH1,之后加入到boxV中
        boxH1.add(new JLabel("Port:"));
        boxH1.add(Box.createHorizontalStrut(5));
        text1=new JTextField();
        boxH1.add(text1);
        boxH1.add(Box.createHorizontalStrut(10));
        button1=new JButton("Start");
        boxH1.add(button1);
        boxV.add(boxH1);
        boxV.add(Box.createVerticalStrut(10));
        //3°开始添加文本显示区至boxV
        text=new JTextArea(9,30);
        JScrollPane jScrollPane=new JScrollPane(text);  //将text放置到滚动窗格(一种容器)中
        text.setEditable(false);
        jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
                                                       //当text内文本高度超过text高度时,text出现竖直滚动条
        boxV.add(jScrollPane);
        boxV.add(Box.createVerticalStrut(10));
        //4°开始填装boxH2,之后将boxH2加入到boxV中
        boxH2.add(new JLabel("Say:"));
        boxH2.add(Box.createHorizontalStrut(5));
        text2=new JTextField();
        boxH2.add(text2);
        boxH2.add(Box.createHorizontalStrut(5));
        button2=new JButton("Say");
        boxH2.add(button2);
        boxV.add(boxH2);
        add(boxV);
    }
    private void eventinit(){
        ac=new myactionlistenr();   //初始化监听器
        button1.addActionListener(ac);  //监听器注册
        button2.addActionListener(ac);  //监听器注册
    }
    private void startserver(){  //”开启服务“方法,当点击Start按钮时,监听器检测到,调用此方法
          try {
              server = new ServerSocket(Integer.parseInt(text1.getText())); //用text1文本框内容对应的数字初始化服务器套接字
              text.append("Server starting…\n");                     //服务器端打印"Server starting…"
              text.paintImmediately(text.getBounds()); //本条语句使得Server starting立即显示出来
                                                      // 原因在于append方法只是将参数加至缓冲区
                                                     // 而本线程会被下一行accept方法阻塞
                                                     //调用paintImmediately方法直接将缓冲区内容显示出来
              sc = server.accept();         // 等待客户端连接,初始化与客服端相连接的套接字对象sc
              text.append("Client connected…\n"); //服务器端打印”Client connected…“
              in = new DataInputStream(sc.getInputStream()); //将in初始化为sc的输入流
              out = new DataOutputStream(sc.getOutputStream()); //将out初始化为sc的输出流
              readThread = new ReadThread();               //创建读取数据的线程
              readThread.start();                          //读取数据的线程开始运行
          } catch (IllegalArgumentException e) {  //若端口参数不符合,抛出IllegalArgumentException,用消息对话框提示用户
              JOptionPane.showMessageDialog(this,"端口值范围必须为0~65535","警告",JOptionPane.WARNING_MESSAGE);
          }catch (IOException e){
              JOptionPane.showMessageDialog(this,"未知原因连接错误","警告",JOptionPane.WARNING_MESSAGE);
          }catch (Exception e){
              System.out.println(e.toString());
          }

    }
    private void sentmessage(){  //当say按钮被点击,监听器检测到,调用该方法
        if(readThread==null){    //先判断是否已连接,只需判断readThread是否被创建,未创建则发出提示信息,终止方法
            JOptionPane.showMessageDialog(this,"未连接无法发送信息","警告",JOptionPane.WARNING_MESSAGE);
            return;
        }
        try{
            out.writeUTF("Server: "+text2.getText()+"\n");  //向客户端发送信息
            text.append("Server: "+text2.getText()+"\n");       //同时更新服务器端文本区内容
            text2.setText("");                                 //清空text2
        }catch (IOException e){//异常处理
            JOptionPane.showMessageDialog(this,"未知原因无法发送信息","警告",JOptionPane.WARNING_MESSAGE);
            System.out.println(e.toString());
        }
    }
    class myactionlistenr implements ActionListener { //监视按钮的监听器
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == button1) startserver();   //如果点击的按钮为start,调用startserver方法
            if (e.getSource() == button2) sentmessage();   //如果点击的按钮为say,则调用sentmessage方法
        }
    }
    class ReadThread extends Thread{
        public void run(){
            while(true) {
                try {
                    text.append(in.readUTF());    //将输入流读取的数据添加至文本显示区
                } catch (IOException e) {
                    System.out.println(e.toString());
                }
            }
        }
    }
    public static void main(String[] args) {
        ServerFrame sf=new ServerFrame();
    }
}

②客户端:

//Author:Sherlock Novitch in Hfut
// -*- codeing=utf-8 -*-
// @time:2020/10/19 15:14
// @File:ClientFrame.java
// @Software:IDEA
// @blog:https://blog.youkuaiyun.com/RealCoder

package experiment2;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;

public class ClientFrame extends JFrame {
    private JTextField text1,text2,text3; //text1为ip地址输入栏,text2为端口地址输入栏,text3为消息输入栏
    private JTextArea text;           //文本显示区
    private JButton button1,button2;  //button1为connect按钮,button2为say按钮
    private Socket client;           //客户端套接字
    private DataInputStream in;     //从服务器到客户端的输入流
    private DataOutputStream out;  //从客户端到服务器的输出流
    private ReadThread readThread; //读取服务器消息的线程
    private actionlistener ac;  //监听按钮button1和button2的监听器
    private ClientFrame() { //构造方法
        setLayout(new FlowLayout()); //窗体整体布局为FlowLayout
        GUIinit();                //调用组件初始化方法
        Eventinit();              //调用事件初始化方法
        setVisible(true);          //设置可见
        setResizable(false);     //设置不可更改大小
        setDefaultCloseOperation(EXIT_ON_CLOSE);  //设置当关闭窗口时,程序终止
    }
    private void GUIinit(){  //组件初始化方法
        setTitle("客户端");  //设置标题
        setBounds(600,250,500,300);  //位置大小
        Box boxH1=Box.createHorizontalBox(); //创建水平盒式容器,后续装入"Server IP:",text1,"Server Port",button1;
        Box boxH2=Box.createHorizontalBox(); //创建水平盒式容器,后续装入"Say:",text3,button2;
        Box boxV=Box.createVerticalBox();  //创建垂直盒式容器,后续装入“客户端设置:",boxH1,text,boxH2;
        //1°boxV装入“客户端设置”标签
        Box temp=Box.createHorizontalBox();
        temp.add(new JLabel("客户端设置:"));
        temp.add(Box.createHorizontalStrut(400));
        boxV.add(temp);
        boxV.add(Box.createVerticalStrut(5));
        //2°将Server IP:",text1,"Server Port",button1从左到右加入到boxH1中,再讲boxH1加入到boxV中
        boxH1.add(new JLabel("Server IP:"));
        boxH1.add(Box.createHorizontalStrut(5));
        text1=new JTextField();
        boxH1.add(text1);
        boxH1.add(Box.createHorizontalStrut(10));
        boxH1.add(new JLabel("Server Port:"));
        boxH1.add(Box.createHorizontalStrut(5));
        text2=new JTextField();
        boxH1.add(text2);
        boxH1.add(Box.createHorizontalStrut(5));
        button1=new JButton("Connect");
        boxH1.add(button1);
        boxV.add(boxH1);
        boxV.add(Box.createVerticalStrut(10));
        //3°将text文本显示区加入到滚动窗格并设置超高度出现竖直滚动条,再将滚动窗口加入到boxV中
        text=new JTextArea(9,30);
        JScrollPane jScrollPane=new JScrollPane(text);
        text.setEditable(false);
        jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        boxV.add(jScrollPane);
        boxV.add(Box.createVerticalStrut(10));
        //4°依次将从左到右“客户端设置:",boxH1,text,boxH2加入到boxH2中,再将boxH3加入到boxV中
        boxH2.add(new JLabel("Say:"));
        boxH2.add(Box.createHorizontalStrut(5));
        text3=new JTextField();
        boxH2.add(text3);
        boxH2.add(Box.createHorizontalStrut(5));
        button2=new JButton("Say");
        boxH2.add(button2);
        boxV.add(boxH2);
        add(boxV);
    }
    private void Eventinit(){
        ac=new actionlistener();//初始化监听器
        button1.addActionListener(ac); //监听器注册
        button2.addActionListener(ac);  //监听器注册
    }
    private void startserver(){  //点击connect按钮后调用的启动客户端服务的方法
        try{
            client=new Socket();   //初始化客户端套接字
            InetAddress address=InetAddress.getByName(text1.getText()); //用text1文本栏中的ip地址创建InetAddress
            InetSocketAddress socketAddress=new InetSocketAddress(address,Integer.parseInt(text2.getText())); //所连接服务器的地址
            client.connect(socketAddress); //连接到服务器
            text.append("Connect to server…\n"); //文本显示区添加“Connect to server…”
            in=new DataInputStream(client.getInputStream());  //初始化输入流
            out=new DataOutputStream(client.getOutputStream()); //初始化输出流
            readThread=new ReadThread();   //创建读取数据的线程
            readThread.start();           //线程开始运行
        }catch (UnknownHostException e){ //IP地址有误,发出提示
           JOptionPane.showMessageDialog(this,"输入IP地址有误","警告",JOptionPane.WARNING_MESSAGE);
        }catch (IllegalArgumentException e) { //端口值非法,发出提示
            JOptionPane.showMessageDialog(this,"端口值范围必须为0~65535","警告",JOptionPane.WARNING_MESSAGE);
        }
        catch  (IOException e) {
            JOptionPane.showMessageDialog(this,"无法连接至端口","警告",JOptionPane.WARNING_MESSAGE);
        }catch (Exception e){
            System.out.println(e.toString());
        }
    }
    private void sentmessage(){  //点击say按钮调用的方法
        if(readThread==null){   //先判断是否已经连接至服务器,若没有,提示并终止方法
            JOptionPane.showMessageDialog(this,"未连接无法发送信息","警告",JOptionPane.WARNING_MESSAGE);
            return;
        }
        try{
            out.writeUTF("Client: "+text3.getText()+"\n"); //发送信息至服务器
            text.append("Client: "+text3.getText()+"\n");  //客户端文本显示区添加刚发过的内容
            text3.setText(""); //清空输入栏
        }catch (IOException e){
            JOptionPane.showMessageDialog(this,"未知原因无法发送信息","警告",JOptionPane.WARNING_MESSAGE);
        }
    }
    class actionlistener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(e.getSource()==button1) startserver(); //如果点击的按钮是connect(button1),调用startserver方法
            if(e.getSource()==button2) sentmessage(); //如果点击的按钮是say(button2),调用sentmessage方法
        }
    }
    class ReadThread extends Thread{  //读取数据的线程
        public void run(){
            while(true){
                try{
                    text.append(in.readUTF());  //读入服务器传入的信息,并显示到文本显示区
                }catch (IOException e) {
                    System.out.println(e.toString());
                }
            }

        }
    }
    public static void main(String[] args) {
        ClientFrame cf=new ClientFrame();
    }
}

卑微求赞

基于GUI的网络通信程序设计.docx 实验二 基于GUI的网络通信程序设计 一.实验目的 1.掌握Java中GUI程序的编写,包括事件监听机制。 2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。 3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。 4.掌握用面向对象的方法分析和解决复杂问题。 二.实验内容 编写程序完成以下功能: 1. 设计一个基于GUI的客户-服务器的通信应用程序,如图1,图2所示。 图1 Socket通信服务器端界面 图2 Socket通信客户端界面 2.图1为Socket通信服务器端界面,点击该界面中的【Start】按钮,启动服务器监 立即下载

相关推荐

基于GUI的网络通信程序设计JAVA源代码(server)

基于GUI的网络通信程序设计 JAVA源代码 (server)部分

【Java】基于GUI的网络通信程序设计

目录 一. 程序内容 二. 要求分析 三. 程序编写 0. 程序结构 1. 服务端程序的GUI设计 2. 服务端业务逻辑的编写 3. 为GUI界面绑定按钮事件 4. 将服务端的源码复制后,进行重构,并加以修改为客户端 四、源代码 一. 程序内容 这是合工大软件工程专业Java程序设计课程实验二的内容,该实验要求编写Java程序完成以下功能: 1. 设计一个基于GUI的客户-服务器的通信应用程序,如图1、图2所示。 图1 So..

米糊的头发箱(码代码掉的头发都在这里了) 5438

基于GUI的网络通信程序设计JAVA源代码

基于GUI的网络通信程序设计JAVA源代码

Java实验三 基于GUI的网络通信程序设计【代码构建逻辑】【双向通信】【超多细节优化!!】

超多优化,拿分儿必备! 这次实验代码的构建主要是更加熟练的运用socket网络编程、文件输入输出流、GUI设计、容器的使用、多线程的运用等等多方面的知识,是综合类题型,做完受益身心的类型。

m0_62760838的博客 2947

基于Java的GUI网络通信实验

基于Java的GUI网络通信实验,基于Java socket编写。有需要的同学可以下载哦

Java 实验1

Java基本操作,熟悉Java编程软件的使用,编写简单的Java程序。

基于GUI的网络通信程序设计(JAVA)【此后无良辰】

一.实验目的 1.掌握Java中GUI程序的编写,包括事件监听机制。 2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。 3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。 4.掌握用面向对象的方法分析和解决复杂问题。 二.实验内容 编写程序完成以下功能: 1.设计一个基于GUI的客户-服务器的通信应用程序,如图1,图2所示。 图1 Socket通信服务器端界面

qq_40493829的博客 2462

JAVA实验报告二Java面向对象程序设计.docx

实验二Java面向对象程序设计 (1)定义表示课程的类Course,课程的属性包括课程名、编号、先修课号;方法包括设置课程名、设置编号、设置先修课号,以及打印课程名、课程号、先修课号。编写主程序,创建Course类的对象course,设置course的相关属性,并将属性信息打印输出。 (2)定义接口Shape,其中包括Area方法。类Circle、Square、Triangle均实现了接口Shape。定义主函数,创建元素个数为3的Shape类型的一维数组,分别为数组元素创建Circle、Square和Triangle类型的对象,最后分别调用各数组元素的Area方法,输出相关信息。 (3)编制程序,完成自定义异常。

HFUT Java Experiment:基于GUI的网络通信程序设计

1.掌握Java中GUI程序的编写,包括事件监听机制。2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。4.掌握用面向对象的方法分析和解决复杂问题。图1 Socket通信服务器端界面图2 Socket通信客户端界面2.图1为Socket通信服务器端界面,点击该界面中的【Start】按钮,启动服务器监听服务(在图1界面中间的多行文本区域显示“Server starting…”字样)。

qq_35660654的博客 813

新手避坑指南:手把手教你从零编写DC综合的.synopsys_dc.setup配置文件

本文详细介绍了如何从零开始编写DC综合的.synopsys_dc.setup配置文件,帮助新手避开常见误区。内容涵盖工艺库路径设置、核心参数详解、实用调试技巧以及高效配置模板,特别强调了配置文件在数字IC设计流程中的重要性。通过实战案例和常见报错解决方案,读者可以快速掌握DC综合配置的关键技能。

weixin_30517215的博客 297

手把手教你用示波器搞定PCIe 5.0 REFCLK时钟信号测量(附完整参数解读)

本文详细介绍了如何使用示波器进行PCIe 5.0 REFCLK时钟信号测量,包括示波器与探头的选择、关键参数的测量方法及解读,以及实战中的常见问题与解决方案。通过手把手教学和完整参数解读,帮助硬件工程师高效完成时钟信号测量,确保系统稳定性。

weixin_28704565的博客 359

合工大2023秋Java实验三:基于GUI的网络通信程序设计

合工大2023秋Java实验三:基于GUI的网络通信程序设计

weixin_56977133的博客 2160

PDF与OFD电子发票解析技术实战:从格式转换到精准识别

本文深入探讨了PDF与OFD电子发票解析技术的实战应用,从格式转换到精准识别,提供了全面的解决方案。通过OFD转PDF技术、动态定位算法和多重校验机制,显著提升电子发票识别效率与准确率,助力企业财务数字化转型。

weixin_42565652的博客 166

合工大Java实验三Java---基于GUI的网络通信程序设计

合工大Java实验三--基于GUI的网络通信

weixin_59238679的博客 1812

WPS JS宏实战:批量调整200个Word表格格式的避坑指南(附完整代码)

本文提供了一份详尽的WPS JS宏实战指南,针对批量调整大量Word表格格式的需求。文章深入解析了如何利用JS宏自动化设置字体、行距和边框,并重点解决了常见的“首行访问报错”等核心难题,附有可直接使用的完整代码,帮助用户显著提升文档处理效率。

weixin_29280219的博客 430

Redis【实战篇】---- 分布式锁-redission

重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。不可重试:是指目前的分布式只能尝试一次,我们认为合理的情况是:当线程在获得锁失败后,他应该能再次尝试获得锁。

是微风,是晚霞,是无可替代 1万+

Java实验之基于GUI的网络通信程序设计

                                    基于GUI的网络通信程序设计一、实验目的    1.掌握Java中GUI程序的编写,包括事件监听机制。    2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。    3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。    4.掌握用面向对象的方法分析和解决复杂问题。二...

sortmin的博客 8747

如何使用 Conda 安装 Qiskit(详细教程)

本文介绍了使用conda安装Qiskit量子计算工具包的完整流程。首先创建Python 3.10的conda虚拟环境(qiskit_env),然后安装Qiskit核心包及可视化组件(注意Mac用户的安装命令差异)。接着注册IPython内核并测试环境,通过量子电路创建与可视化演示验证安装成功。该教程为量子计算开发提供了简洁的环境配置指南,适合研究者和开发者快速搭建Qiskit开发环境。

猿小白的博客 565

Java---GUI编程详解

GUI编程 组件: 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1、简介 1.1.gui的核心技术:Swing AWT 1.2.不流行: 界面不美观 需要jre环境 2、AWT 2.1、Awt介绍 1.包含了很多类和接口。GUI:图形用户界面编程 2.元素:窗口,按钮,文本框 2.2、 组件和容器 1.Frame /关于Frame的一些方法 package gui_study; import java.awt.*; //GUI的第一个界面 public cl

Zero摄氏度的博客 5467

17track单号查询逆向分析

这就说明该网站很有可能存在其它检测点,而检测本地替换最大可能的就是检测了代码格式化或者代码长度。也一样,要么导致网站卡死,要么会导致网页加载异常,这里可能就难到不少人了,让我们一步一步解决。而这个站主要是检测了代码格式化,无限循环检测造成了网站卡死,经多次测试发现检测点共三处。方法中代码很长,但是经调试后发现,它其实只返回一个固定的值,这里直接写死即可。同样的,虽然看起来很长,但是跟过之后就会发现流程很简单,这里主要就是对。追加了一些值,是一条很长的语句,整理代码。,核心流程也很简单,稍微跟一下就出来了,

pyzzd的博客 1624

在hyper-v管理器中修改WSL虚拟交换机后,打开wsl闪退

此次是因为修改了WSL虚拟交换机造成的wsl打不开或闪退,还有一种可能是关闭了hyper-v造成了wsl。

DN金猿的博客 1173

JAVA实现基于GUI的网络通信程序 源代码

Client: package firststudy; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import java.util.*; import javax.swing.*; public class Client{ public static void main(Str...

我亦是行人 2487

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java基于GUI的网络通信程序设计【电竞杜小帅】

1.设计一个基于GUI的客户-服务器的通信应用程序,如图1,图2所示。 图1 Socket通信服务器端界面 图2 Socket通信客户端界面 2.图1为Socket通信服务器端界面,点击该界面中的【Start】按钮,启动服务器监听服务(在图1界面中间的多行文本区域显示“Server starting…”字样)。图2为Socket通信客户端界面,点击该界面中的【Connect】按钮与服务器建立链接,并在图2所示界面中间的多行文本区域显示“Connect to server…”字样,当服务器端监听到客户端的

qq_45752502的博客 808

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java实验 基于GUI的网络通信程序设计

服务器端 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.ServerSocket; import java.net.Socket; pu...

lalala_HFUT的博客 2783

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

基于GUI的java Socket通信应用程序(双向通信 图形界面)

设计要求: 1.Socket通信服务器端界面,点击该界面中的【Start】按钮,启动服务器监听服务 2.Socket通信客户端界面,点击该界面中的【Connect】按钮与服务器建立链接,服务器端界面中间的多行文本区域显示“Connect to server…”字样 3.当服务器端监听到客户端的连接后,服务器端界面中间的多行文本区域追加一行“Client connected…”字样,并与客户端建立Socket连接。 4.双向通信(多线程) 程序实现结果如下图: IDE:Intellij IDEA 代码如下

秃秃然然的博客 4486
上一篇: 【leetcode451】根据字符出现频率排序,哈希表加优先队列解法
下一篇: 【精选】一篇文章带你搞懂排列算法题【面向面试】
RealWeakCoder
博客等级 码龄7年 236粉丝 68原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值