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

CAN收发器TJA1145A休眠唤醒应用

TJA1145的唤醒工作原理主要依赖于其内部的唤醒机制和外部硬件的配合,主要涉及低功耗状态、选择性唤醒功能。TJA1145是一款CAN收发器,它支持多种工作模式,包括NormalStandbySleep等。在这些模式中,Sleep模式是最低功耗状态,而Normal模式则是最活跃的状态,其中Standby模式处于两者之间,允许一定的功能操作但功耗较低。TJA1145可以通过接收特定的唤醒源从Sleep或Standby模式唤醒到Standby或Normal模式。唤醒源的检测与处理。

radix关于mcu的博客,持续更新中... 5950

智能车竞赛卡丁快跑组:自动驾驶与人车交互技术实战解析

本文深入解析了智能车竞赛卡丁快跑组的技术核心,重点探讨了自动驾驶与人车交互两大模块的实战方案。文章详细拆解了从环境感知、路径规划到语音识别、命令执行的完整流程,并分享了基于单片机平台的调试心法与赛场经验,为参赛者提供了一套从零开始、分步攻坚的系统性备赛指南。

f0g1h2的博客 1177

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

SDK报错(1)undefined reference to `f_mount‘

按文中说法是ff.c文件中用了一个if语句来判断是否启用ff.h头文件,但是却没有地方进行宏定义来满足这个if条件。利用SDK读取sd卡时,添加了xilffs库,而且包含了ff.h头文件,还是对fat库的函数报错。网上有的说在ARM v7 gcc linker中添加xilffs的方法可以解决,但我试了没有用。如下图,我们可以在ff.c中自己添加一个宏定义来实现这个条件。最后在赛灵思论坛找到了一个解决方法,原文连接如下。这时候保存编译之后,报错就消失了。ff.c 文件在bsp工程下。

EfunStudy的博客 1481

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

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

weixin_56977133的博客 2159

PCL 欧式聚类分割【2026最新版】

PCL中欧式聚类提取算法原理详解、代码实现以及一个大自然场景地物分割提取并保存分割结果到本地文件夹的应用案例。

点云侠的博客 40万+

华为OD新系统机试真题-8位LED控制器(C/C++/Py/Java/Js/Go)

华为OD新系统机试真题【8位LED控制器】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统4月19号机试真题【8位LED控制器】

qq_45776114的博客 597

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

手把手入门YOLO到改进优化教程 | 【P1基础篇】YOLOv8网络架构原理

本节先来学习基础知识,以YOLOv8进行讲解入门, 拿YOLOv8入手掌握YOLO的底层逻辑 ,也可以基于此来轻松学习后面更新的YOLO系列 (大部分YOLO版本的核心思想一致,更新是基于旧版本做结构升级、优化策略,学习成本会越来越低)。

嵌入式阿齐Archie 2万+

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

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

m0_74399268的博客 683

coredump文件的原理是啥

Core Dump(核心转储)是操作系统在程序崩溃(如段错误、非法指令等)时自动生成的一个文件,它包含了程序崩溃瞬间的。通过 core dump,开发者可以像“时间回溯”一样检查程序崩溃瞬间的状态,是调试复杂问题的利器!终止时,Linux 内核会生成 core 文件。不会生成 core dump,因为它们是“优雅终止”信号。这样 core 文件会直接压缩存储,节省磁盘空间。的文件(类似可执行文件),可以用。Core 文件本质上是一个。

二进制君 381

获取抖音中x-secsdk-csrf-token的方法

获取抖音中x-secsdk-csrf-token的方法

sh_moranliunian的博客 2018

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

大学实验记录

AWP2020的博客 3004

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

weixin_59238679的博客 1812

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

m0_62760838的博客 2947

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

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

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

余额充值