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

Zlib1.2.11源码编译(Win10+VS2019)

下载 下载网址: zlib Home Site 得到文件: 解压缩到“D:\SourceCodes\zlib-1.2.11” 使用CMake配置、生成并打开项目 将CMakeLists.txt拖入CMake,配置(Configure): 生成(Generate) 打开项目(Open Project),CMake调用VS2019打开项目 生成debug版本 构建项目ALL_BUILD。成功生成debug版本 在“D:\Sourc...

Alexabc3000的专栏 1893

APK静态分析(取证角度)——理论部分

APP是指应用程序(Application),是指能够在手机、平板电脑、电脑等移动设备上运行的软件。APP可以帮助用户进行各种功能操作,如社交媒体、游戏、购物、学习、工作等。用户可以通过应用商店或者在线下载安装APP,然后在设备上使用它们。APP的种类非常丰富,能够满足用户不同的需求和兴趣。

currify的博客 3207

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

从SD更新字库到FLASH,再用LCD显示

用Flash当字库存储载体。思路是先将要用到的字库文件存在SD卡,然后存储到Flash,LCD显示时候从Flash中读取 还挺顺利的,移植的原子的程序,自己稍加修改,主要是我的液晶屏函数,Flash读写函数,还有存储文件的flash地址不一样。一晚上搞定,大小字体都OK。挺高兴哈哈。这几天忙工作事情有点耽搁了学习进展嘿嘿 在text.c的showstr函数中char的字体颜色随意设置的,可以显...

weixin_30505751的博客 914

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

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

weixin_56977133的博客 2159

Python爬虫实战:利用最新技术爬取B站视频信息

本文详细介绍了如何使用Python最新技术构建一个功能完善的B站视频信息爬虫。我们从基础爬取开始,逐步深入到反反爬策略、异步处理、数据存储和分析等高级主题。更智能的反反爬策略:使用机器学习识别验证码更高效的分布式架构:结合Kubernetes实现弹性伸缩实时数据管道:将爬取的数据实时推送到数据分析平台多平台支持:扩展支持抖音、YouTube等其他视频平台。

2201_76125261的博客 1040

A.特定领域知识图谱知识推理方案:知识图谱推理算法综述[五]-GeniePath会自动过滤多度“邻居“的图神经网络算法。

构图对于GNN格外重要。那么怎样构图才有信息、有意义呢?如果节点的邻居只有自己,即邻接矩阵为对角阵时,GNN会退化成一个DNN模型。图中每个节点都是孤立的,相当图信息并不能相比其他方法带来增益。如果图特别稠密,比如是一个clique,即每个节点都和所有其他节点有边连接。同样的,这样的图信息同样是信息熵为0。经验上讲,节点度分布有区分度的图是相对有价值的。查看图的节点度分布。比如二类分类,分析正负例的图拓扑当然,构图和实际场景强相关。

丨汀、的博客 437

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

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1631

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

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

m0_74399268的博客 683

汽车IVI中控开发入门及进阶(三十八):手机投屏HiCar开发

为了兼容这部分手机,车机端在向手机端发送USB控制命令字的同时,需要启动mDNS Server,广播车机端IP地址和HiCar SDK侦听的Server Socket端口(IP地址和端口在HiCar SDK初始化USB driver时,告知车机),在检测到手机断开USB连接时关闭mDNS Server。厂商在集成HiCar SDK开发HMI应用时,不可避免会使用到智能座舱的敏感权限,例如位置权限、摄像头权限、麦克风权限等,SDK初始化时,厂商HMI应用需要设置必要的车机参数供SDK使用。

码农17年的博客 1075

汽车安全新防线|基于AI的入侵检测系统开发(全网独家复现),CNN-BiLSTM融合改进篇 强化CAN总线数据感知、助力多类型入侵检测、实时响应预警、车载场景有效落地

基于AI的入侵检测系统是汽车网络安全领域的重要技术突破,能够有效应对日益复杂的网络攻击威胁。随着AI技术的不断发展和普及,AI入侵检测系统将在汽车安全领域发挥越来越重要的作用。对于汽车制造商和供应商来说,实施AI入侵检测系统不仅是保障车辆安全的需要,也是提升市场竞争力的重要手段。未来,AI入侵检测系统将成为智能汽车的标准配置,为用户提供更加安全、可靠的驾驶体验。

getusushu的博客 86

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

大学实验记录

AWP2020的博客 3004

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

weixin_59238679的博客 1812

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

m0_62760838的博客 2947

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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、付费专栏及课程。

余额充值