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

基于GUI的网络通信程序设计 实验目的 1.掌握Java中GUI程序的编写,包括事件监听机制。 2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。 3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。 4.掌握用面向对象的方法分析和解决复杂问题。 过程演示 实验内容 图1为Socket通信服务器端界面,点击该界面中的【Start】按钮,启动服务器... 阅读详情

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

一、实验目的

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

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

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

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

二、实验原理

    1.通过Thread建立多线程实现双向通信。

    2.通过Socket类来实现客户端与服务器的连接。

    3.通过继承JFrame类来创建图形化界面。

    4.通过动作监听器来实现各个按钮的操作。

三、实验过程、步骤及原始记录(算法、原程序、测试结果,分析等)

    1、创建各个文本框进行消息的存储与显示。

    2、建立监听器与建立端口与连接。

    3、建立文本框的消息传送方式。

    4、重新定义多线程的run函数。

    5、开启端口等待客户端的连接。

    6、等待客户端消息并显示消息。

    7、开启客户端并且启动连接。

    8、接受服务器端的消息并显示。

服务器代码:

package Server;

import java.io.*;
import java.net.*;
import javax.swing.*;

import java.awt.event.*;
import java.awt.*;

public class ServerUI extends JFrame {
	JTextArea mainArea;//主文本框

	JTextField sendArea;//端口文本框

	JTextField indexArea;//消息文本框

	SvrCom server;//线程对象

	public void setServer(SvrCom server) {
		this.server = server;
	}

	public ServerUI() {
		super("服务器");
		Container contain = getContentPane();
		contain.setLayout(new BorderLayout());//布局器
		mainArea = new JTextArea(10,30);//10行的多行文本
		JScrollPane mainAreaP = new JScrollPane(mainArea);
		JPanel panel = new JPanel();
		JPanel myPanel=new JPanel();
		//端口文本框内容及布局。
		JLabel myLabel2=new JLabel("端口:",SwingConstants.LEFT);
		JTextField myField1=new JTextField(30);
		JButton button1=new JButton("Start");
		//监听器判断是否开始连接。
		button1.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent ae) {
				server.sendMsg("PORT:1234");
				mainArea.append("服务开始>>>" + "\n");
				sendArea.setText("");
			}
		});
		//端口文本框添加到布局器中。
		myField1.setText("1234");
		myPanel.add(myLabel2);
		myPanel.add(myField1);
		myPanel.add(button1);
		panel.setLayout(new BorderLayout());
		sendArea = new JTextField(25);//新建发送消息框
		JButton sendBtn = new JButton("发送");
		sendBtn.addActionListener(new ActionListener()// 注册动作监听器
				{
					public void actionPerformed(ActionEvent ae) {
						server.sendMsg(sendArea.getText());// 把信息传递到客户端
						mainArea.append("服务器:" + sendArea.getText() + "\n");// 把信息显示在服务器的聊天记录区域
						sendArea.setText("");
					}
				});
		//主文本框及框架的布局。
		panel.add(new JLabel("Say:"),BorderLayout.WEST);
		panel.add(sendBtn, BorderLayout.EAST);
		panel.add(sendArea, BorderLayout.CENTER);
		contain.add(myPanel, BorderLayout.NORTH);
		contain.add(mainAreaP, BorderLayout.CENTER);
		contain.add(panel, BorderLayout.SOUTH);
		setSize(500, 300);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
	}

	public static void main(String[] args) {
		ServerUI ui = new ServerUI();
		SvrCom server = new SvrCom(ui);// 创建并启动网络通讯线程,准备接受客户端数据包
	}
}
class SvrCom extends Thread
{
	Socket client;

	ServerSocket soc;

	BufferedReader in;

	PrintWriter out;

	ServerUI ui;

	public SvrCom(ServerUI ui) { // 构造函数
		this.ui = ui;
		ui.setServer(this);
		try {
			soc = new ServerSocket(1234); // 开设服务器端口1234
			System.out.println("启动服务器成功,等待端口号:1234");
			client = soc.accept();// 与客户端开启连接。
			System.out.println("连接成功!来自" + client.toString());
			//读入客户端的消息。
			in = new BufferedReader(new InputStreamReader(client.getInputStream()));
			//将消息发出。
			out = new PrintWriter(client.getOutputStream(), true);
		} catch (Exception ex) {
			System.out.println(ex);
		}
		start();
	}

	public void run() {// 重新定义run函数
		String msg = "";
		while (true) {
			try {
				msg = in.readLine();// 从in对象上读数据信息
			} catch (SocketException ex) {
				System.out.println(ex);
				break;
			} catch (Exception ex) {
				System.out.println(ex);
			}
			//判断消息不为空则输出消息。
			if (msg != null && msg.trim() != "") {
				System.out.println(">>" + msg);
				ui.mainArea.append(msg + "\n");
			}
		}
	}

	public void sendMsg(String msg) {//在服务器界面显示输出消息
		try {
			out.println("服务器:" + msg);
		} catch (Exception e) {
			System.out.println(e);
		}
	}
}

客户端代码:

package Server;

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


public class ClientUI extends JFrame {
	JTextArea mainArea;

	JTextField sendArea;

	ChatClient client;

	JTextField ipArea;
	JTextField portArea;

	JButton btnLink;
	//构造函数
	public void setClient(ChatClient client){
		this.client = client;
	}

	public ClientUI() {
		super("客户端");
		Container contain = getContentPane();
		contain.setLayout(new BorderLayout());
		mainArea = new JTextArea(10,30);//多行文本框
		JScrollPane mainAreaP = new JScrollPane(mainArea);
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());
		sendArea = new JTextField(25);//发送文本框
		JButton sendBtn = new JButton("发送");
		//监听连接消息。
		sendBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				client.sendMsg(sendArea.getText());
				mainArea.append("客户端:" + sendArea.getText() + "\n");
				sendArea.setText("");
			}
		});
		JPanel ipPanel = new JPanel();
		ipPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
		//连接消息文本框及布局。
		ipPanel.add(new JLabel("Server IP:"));
		ipArea = new JTextField(15);
		ipArea.setText("127.0.0.1");
		ipPanel.add(ipArea);
		ipPanel.add(new JLabel("端口:"));
		portArea =new JTextField(8);
		ipPanel.add(portArea);
		btnLink = new JButton("连接!");
		ipPanel.add(btnLink);
		//连接按钮的监听器。
		btnLink.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				String port=portArea.getText();
				//判断端口是否正确。
				if( port.equals( "1234")){
					mainArea.append("连接成功" + "\n");
				client = new ChatClient(ipArea.getText(), 1234, ClientUI.this);
				ClientUI.this.setClient(client);
				}
				else {
					mainArea.append("端口错误" + "\n");
				}	
			}
		});
		//发送文本框及布局。
		panel.add(new JLabel("Say:"),BorderLayout.WEST);
		panel.add(sendBtn, BorderLayout.EAST);
		panel.add(sendArea, BorderLayout.CENTER);
		//主文本框布局。
		contain.add(ipPanel, BorderLayout.NORTH);
		contain.add(mainAreaP, BorderLayout.CENTER);
		contain.add(panel, BorderLayout.SOUTH);
		setSize(500, 300);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
	}

	public static void main(String[] args) {
		ClientUI ui = new ClientUI();
	}
}


class ChatClient extends Thread {
	Socket sc;

	BufferedReader in;

	PrintWriter out;

	ClientUI ui;
	//构造函数
	public ChatClient(String ip, int port, ClientUI ui) {
		this.ui = ui;
		try {
			sc = new Socket(ip, port);
			//发送信息。
			out = new PrintWriter(sc.getOutputStream(), true);
			//读取信息。
			in = new BufferedReader(new InputStreamReader(sc.getInputStream()));
		} catch (Exception e) {
			System.out.println(e);
		}
		start();
	}
	//重新定义run函数。
	public void run() { 
		String msg = "";
		while (true) {
			try {
				msg = in.readLine();
			} catch (SocketException ex) {
				System.out.println(ex);
				break;
			} catch (Exception ex) {
				System.out.println(ex);
			}
			//判断服务器发送信息是否为空。
			if (msg != null && msg.trim() != "") {
				System.out.println(">>" + msg);
				ui.mainArea.append(msg + "\n");
			}
		}
	}
	public void sendMsg(String msg) {
		try {
			out.println("客户端:" + msg);
		} catch (Exception e) {
			System.out.println(e);
		}
	}
}



基于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源代码

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

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

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

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

java网络编程代码

主要讲解网络编程,UDP和Socket编程,以及使用Socket做一个简单的聊天软件。

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

filemanager.zip

1、实现文件夹创建、删除、进入。 2、实现当前文件夹下的内容罗列。 3、实现文件拷贝和文件夹拷贝(文件夹拷贝指深度拷贝,包括所有子目录和文件)。 4、实现指定文件的加密和解密。 5、实现指定文件和文件夹的压缩。 6、实现压缩文件的解压。 7、文件管理器文件树。 8、文件管理器具有图形界面。

用户界面1-(菜单1)

Menu: 一.使用资源文件构建菜单 二.使用代码创建菜单

Java—网络程序设计

Socket介绍 Socket是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便地实现网络上数据的传递。在Java中,有专门的socket类来处理用户的请求和响应。利用Socket类的方法,就可以实现两台计算机之间的通信。 在Java中,可以将Socket理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream()方法,另一个是getOutputStream()方法。getInputStream()方法用于得到一个输入流

LiLi的博客 2139

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

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

Java基础之Java网络编程详解

网络编程是现代软件开发中不可或缺的一部分,它通过网络实现了计算机之间的通信,使得信息交换和数据共享成为可能。在网络通信的实现过程中,语言的选择和工具的使用至关重要,而Java提供了强大的支持,使得开发者可以更便捷地构建网络应用程序。网络通信的核心是数据的发送与接收,而Java的网络编程模型为此提供了一套易用且高效的工具。无论是点对点的通信,还是基于更复杂协议的多节点交互,Java都能满足需求。在网络编程中,基础的通信模式是基于Socket的点对点连接,它可以实现客户端和服务器之间的直接通信。

道可道非常道 2067

Windows上python的spark环境搭建

1.安装好JDK 下载并安装好jdk-12.0.1_windows-x64_bin.exe,配置环境变量: 新建系统变量JAVA_HOME,值为Java安装路径 新建系统变量CLASSPATH,值为 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(注意最前面的圆点) 配置系统变量PATH,添加 %JAVA_HOME%bin;%JAVA_HOME%jrebin 在CMD中输入:java或者java -version,不显示不是内部命令等,说明安装成功。

weixin_43915303的博客 651

海康读码器上位机开发避坑指南:IDMVS客户端之外,如何用C# SDK搞定扫码、数据比对与实时控制?

本文详细介绍了如何利用海康读码器的C# SDK进行二次开发,实现从基础扫码到复杂工业控制的全流程解决方案。内容涵盖SDK架构解析、多设备管理系统构建、业务逻辑与设备控制实现,以及系统集成与性能优化等关键环节,为工业自动化领域的开发者提供实用指南。

weixin_30642561的博客 550

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

Java实验———基于GUI的网络通信程序设计 实验内容:编写程序完成以下功能: 1.设计一个基于GUI的客户-服务器的通信应用程序,如图1,图2所示。 图1 Socket通信服务器端界面 图2 Socket通信客户端界面 2.图1为Socket通信服务器端界面,点击该界面中的【Start】按钮,启动服务器监听服务(在图1界面中间的多行文本区域显示“Server starting…”字样)。图2为Socket通信客户端界面,点击该界面中的【Connect】按钮与服务器建立链接,并在图2所示界面中间的多行文

qq_46385075的博客 2522

基于STM32与FPGA Cyclone IV的FSMC高速数据通信实战解析

本文详细解析了基于STM32的FSMC接口与FPGA Cyclone IV实现高速并行数据通信的实战方案。通过将FPGA模拟为SRAM设备,构建了MCU与FPGA之间的高速数据通道,并深入探讨了硬件连接、STM32软件配置、FPGA逻辑设计及性能优化等关键步骤,为图像处理、高速采集等需要大数据量交换的嵌入式应用提供了稳定高效的通信解决方案。

swift5iosmith的博客 294

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

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

weixin_56977133的博客 2159

【MM小贴士】关于SAP系统中关税的处理方式

的运费,这部分来讲,我们关税的计价基础,就应该是货物价值+包邮到中国港口的运费,完后进行报关操作,缴纳关税,后半段从中国港口拉回到企业里面的运输费,就会做到费用里面去,而不是计入到存货成本。1、我们自己的企业和国外厂家A购买一项物资,厂家A的报价会分成几个组成部分货物本身的价值或者货物本身的价值+到国外港口的运费或者货物本身的价值+到中国港口的运费或者货物本身的价值+包邮到你们自己企业的整体运费。所以我的关税就是不确定的。重点是运费是哪一段的运费,如何结算,结算的货币,何时能够确定运费。.........

竹大的博客 9025

基于点云数据的统计滤波算法改进

随着三维视觉和点云处理技术的发展,点云数据在机器人、自动驾驶、增强现实等领域得到了广泛应用。而点云数据中常常包含着各种噪声和异常点,这些噪声和异常点会影响后续的数据处理和分析任务。因此,对点云数据进行滤波处理是必不可少的一步。在点云滤波算法中,统计滤波(Statistical Filtering)是一种常见且有效的方法。它通过对点云数据进行统计分析,将噪声和异常点剔除或修复,从而得到更为准确和可靠的点云数据。本文将介绍一种改进的统计滤波算法,并提供相应的源代码实现。

QfcaLinux的博客 292

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

大疆RoboMaster嵌入式面试,电机FOC调不出来当场走人

摘要:大疆RoboMaster嵌入式工程师面试以实战能力著称,重点考察FreeRTOS任务调度、FOC电机控制和CAN总线三大核心技能。FreeRTOS部分涉及优先级调度、栈溢出排查及信号量与互斥锁的区别;FOC控制要求现场编写电流环代码,并解释Clarke/Park变换原理;CAN总线则关注仲裁机制、CANopen协议应用及错误帧排查方法。面试强调工程实践,需具备STM32开发经验,建议搭建实际环境进行练习。该岗位被誉为"硬件版修罗场",充分体现大疆对实际开发能力的严格要求。

郑伟强dev的专栏 150

Java实验三 基于GUI的网络通信程序设计【平铺直叙版】

Java实验三:基于GUI的网络通信程序设计【平铺直叙版】

m0_74399268的博客 683

8、内存交织技术详解

本文详细解析了内存交织技术的基本原理、工作机制及实现方式,探讨了其在提升内存访问速度和系统性能中的关键作用。文章还分析了内存交织的优缺点、实际应用场景以及与其他优化技术的结合应用,并提出了未来发展的可能方向,为理解与运用该技术提供了全面参考。

g9h0i1的博客 549

手把手教你玩转服务器芯片架构--​​7.1 项目1:基于FPGA的RISC-V软核设计(Verilog实现核心指令执行单元)​

本文介绍了基于FPGA的RISC-V软核设计实践项目。项目采用Verilog实现RV32I指令集核心处理器,包含指令解码、ALU、寄存器堆等关键模块设计,并通过功能仿真验证。在Xilinx Artix-7 FPGA上完成综合与部署,资源利用率控制在5%以内。最后探讨了五级流水线优化、指令集扩展等进阶方案。该实践完整覆盖了从指令集设计、RTL实现到FPGA部署的全流程,可作为学习处理器架构与FPGA开发的典型案例。

MHD0815的博客 173

合肥工业大学Java技术实验二 基于GUI的网络通信程序设计

大学实验记录

AWP2020的博客 3004

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

weixin_59238679的博客 1812

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

m0_62760838的博客 2947

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java技术 实验三 实验报告 (合肥工业大学 2023级)

Java技术 实验三 基于GUI的网络通信程序设计 完整报告合肥工业大学 2023级

Dulecam的博客 794

合工大Java实验报告源代码

合工大Java实验报告源代码 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了合肥工业大学Java课程的实验报告源代码,包含以下实验内容: 实验一:Java开发环境使用与面向对象编程 实验二:基于GUI的网络通信程序设计 实验三:货物进销管理系统 实验四:Java Web编程 使用说明 在运行以下实验代码前,请确保已正确配置Java开发环境。由于实验代码中有...

gitblog_06719的博客 278
上一篇: Java Web实验之简单的网站注册登录
下一篇: Java实验之货物进销管理系统
sortmin
博客等级 码龄9年 45粉丝 178原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值