网络程序设计

互相连接,发送信息

tcp和udp协议

tcp会有准备,udp不会准备。

8080端口:tomcat端口,java和web相连接

80端口:http

21端口:ftp

套接字

socket:提供给程序可以对外进行连接的接口

ip地址

特殊的ip:本地回送地址

127.0.0.1

域名不会相同

ip地址

计算机名

package twentyoneth;import java.net.*; 									//导入java.net包
public class Address { 								//创建类public static void main(String[] args) {InetAddress ip; 							//创建InetAddress对象try { 									//使用try语句块捕捉可能出现的异常ip = InetAddress.getLocalHost(); 			//实例化对象String localname = ip.getHostName(); 		//获取本机名String localip = ip.getHostAddress(); 		//获取本机IP地址System.out.println("本机名:" + localname);	//将本机名输出System.out.println("本机IP地址:" + localip); 	//将本机IP地址输出} catch (UnknownHostException e) {e.printStackTrace(); 						//输出异常信息}}
}
//例题20.1

服务器

package twentyoneth;import java.io.*;
import java.net.*;public class MyServer {private ServerSocket server; // 服务器套接字private Socket socket; // 客户端套接字void start() {// 启动服务器try {server = new ServerSocket(8998); // 服务器启用8998端口System.out.println("服务器套接字已经创建成功");while (true) {System.out.println("等待客户端的连接");socket = server.accept(); // 服务器监听客户端连接// 根据套接字字节流创建字符输入流BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));while (true) {// 循环接受信息String message = reader.readLine();// 读取一行文本if ("exit".equals(message)) {// 如果客户端发来的内容为“exit”System.out.println("客户端退出");break;// 停止接受信息}System.out.println("客户端:" + message);}reader.close(); // 关闭流socket.close(); // 关闭套接字}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {MyServer tcp = new MyServer();tcp.start(); // 启动服务器}
}
//21.2

客户

package twentyoneth;import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.Socket;
import javax.swing.*;public class MyClient extends JFrame {private PrintWriter writer;// 根据套接字字节流创建的字符输出流Socket socket; // 客户端套接字private JTextArea area = new JTextArea();// 展示信息的文本域private JTextField text = new JTextField(); // 发送信息的文本框public MyClient() {setTitle("向服务器送数据");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container c = getContentPane(); // 主容器JScrollPane scrollPane = new JScrollPane(area);// 滚动面板getContentPane().add(scrollPane, BorderLayout.CENTER);c.add(text, "South"); // 将文本框放在窗体的下部text.addActionListener(new ActionListener() {// 文本框触发回车事件public void actionPerformed(ActionEvent e) {writer.println(text.getText().trim()); // 将文本框中的信息写入流area.append(text.getText() + '\n'); // 将文本框中的信息显示在文本域中text.setText(""); // 将文本框清空}});}private void connect() { // 连接服务器方法area.append("尝试连接\n"); // 文本域中提示信息try {socket = new Socket("127.0.0.1", 8998); // 连接本地计算机的8998端口writer = new PrintWriter(socket.getOutputStream(), true);area.append("完成连接\n");} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {MyClient clien = new MyClient();clien.setSize(200, 200); // 窗体大小clien.setVisible(true); // 显示窗体clien.connect(); // 连接服务器}
}
//21.2

udp传输协议

package twentyoneth;import java.io.IOException;
import java.net.*;public class Notification extends Thread {String weather = "节目预报:八点有大型晚会,请收听";// 发送的消息int port = 9898; // 端口InetAddress iaddress = null;MulticastSocket socket = null; // 多点广播套接字Notification() {try {iaddress = InetAddress.getByName("224.255.10.0"); // 实例化InetAddress,指定地址socket = new MulticastSocket(port); // 实例化多点广播套接字socket.setTimeToLive(1); // 指定发送范围是本地网络socket.joinGroup(iaddress); // 加入广播组} catch (IOException e) {e.printStackTrace(); // 输出异常信息}}public void run() {while (true) {DatagramPacket packet = null; // 数据包byte data[] = weather.getBytes(); // 字符串消息的字节数组packet = new DatagramPacket(data, data.length, iaddress, port); // 将数据打包System.out.println(weather); // 控制台打印消息try {socket.send(packet); // 发送数据sleep(3000); // 线程休眠} catch (IOException e) {e.printStackTrace(); } catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) { Notification w = new Notification();w.start(); // 启动线程}
}
//21.3

package twentyoneth;import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;
import javax.swing.*;public class Receive extends JFrame implements Runnable, ActionListener {int port; // 端口InetAddress group = null; // 广播组地址MulticastSocket socket = null; // 多点广播套接字对象JButton inceBtn = new JButton("开始接收");JButton stopBtn = new JButton("停止接收");JTextArea inceAr = new JTextArea(10, 10); // 显示接收广播的文本域JTextArea inced = new JTextArea(10, 10);Thread thread;boolean stop = false; // 停止接受信息状态public Receive() {setTitle("广播数据报");setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);thread = new Thread(this);inceBtn.addActionListener(this); // 绑定按钮ince的单击事件stopBtn.addActionListener(this); // 绑定按钮stop的单击事件inceAr.setForeground(Color.blue); // 指定文本域中文字的颜色JPanel north = new JPanel(); // 创建Jpanel对象north.add(inceBtn); // 将按钮添加到面板north上north.add(stopBtn);add(north, BorderLayout.NORTH); // 将north放置在窗体的上部JPanel center = new JPanel(); // 创建面板对象centercenter.setLayout(new GridLayout(1, 2)); // 设置面板布局center.add(inceAr); // 将文本域添加到面板上center.add(inced);add(center, BorderLayout.CENTER); // 设置面板布局validate(); // 刷新port = 9898; // 设置端口号try {group = InetAddress.getByName("224.255.10.0"); // 指定接收地址socket = new MulticastSocket(port); // 绑定多点广播套接字socket.joinGroup(group); // 加入广播组} catch (IOException e) {e.printStackTrace(); // 输出异常信息}setBounds(100, 50, 360, 380); // 设置布局setVisible(true); // 将窗体设置为显示状态}public void run() { // run()方法while (!stop) {byte data[] = new byte[1024]; // 创建缓存字节数组DatagramPacket packet = null;packet = new DatagramPacket(data, data.length, group, port); // 待接收的数据包try {socket.receive(packet); // 接收数据包String message = new String(packet.getData(), 0, packet.getLength()); // 获取数据包中的内容inceAr.setText("正在接收的内容:\n" + message); // 将接收内容显示在文本域中inced.append(message + "\n"); // 每条信息为一行} catch (IOException e) {e.printStackTrace(); // 输出异常信息}}}public void actionPerformed(ActionEvent e) { // 单击事件if (e.getSource() == inceBtn) { // 单击按钮ince触发的事件inceBtn.setBackground(Color.red); // 设置按钮颜色stopBtn.setBackground(Color.yellow);if (!(thread.isAlive())) { // 如线程不处于“新建状态”thread = new Thread(this); // 实例化Thread对象}thread.start(); // 启动线程stop = false; // 开始接受信息}if (e.getSource() == stopBtn) { // 单击按钮stop触发的事件inceBtn.setBackground(Color.yellow); // 设置按钮颜色stopBtn.setBackground(Color.red);stop = true; // 停止接受信息}}public static void main(String[] args) {Receive rec = new Receive();rec.setSize(460, 200);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Java的Process执行命令行,ffmpeg抽帧到一千多帧图片卡住,不报错。

项目场景: 最近需要写一个抽帧、推流的工具类,抽帧写好测试的时候也没问题,等到真正用的时候就发现各种问题。 问题描述 用Java执行ffmpeg抽帧命令,测试的时候没有问题,后来发现抽帧图片多了就会卡住。 刚开始觉得可…

基于c++版本链队列改-Python版本链队列基础理解

##基于链表的队列实现 可以将链表的“头节点”和“尾节点”分别视为“队首”和“队尾”,规定队尾仅可添加节点,队首仅可删除节点。 ##图解 ##基于链表的队列实现代码 class ListNode:"""定义链表"""def __init__(self)…

构建工具链

系列文章目录 文章目录 系列文章目录一、GNU工具链组成二、构建工具链的过程三、准备工作1、环境变量2、Binutils 四、编译freestanding的交叉编译器1、GCC 下载 本文基于《深度探索Linux操作系统:系统构建和原理解析》 一、GNU工具链组成 编译过程分为4个阶段&…

Python接口自动化测试:断言封装详解!

前言 在进行API接口测试时,断言起着至关重要的作用。断言是用于验证预期结果与实际结果是否一致的过程。在Python中,我们可以利用一些库来实现断言功能。 1. 安装必要的库 在Python中,我们主要会使用两个库:requests和jsonpath…

cocos creator [Window] Cannot read property ‘dump‘ of null

写脚本的时候,出现了如下的问题, [Window] Cannot read property dump of null 原因:在下图中,方式一是正常的,而方式二则会爆出此错误,所以需要初始化,给它赋值

docker 安装oracle 19C和Oracle数据库创建100万条数据

docker 安装oracle 19C #拉取oracle19c镜像 docker pull heartu41/oracle19c #创建挂载目录 mkdir -p /data/oracle/oracle19c/data #修改挂载目录权限 chmod 777 /data/oracle/oracle19c/data #启动容器 docker run -d -p 21521:1521 -e ORACLE_SIDORCLCDB -e ORACLE_PDBO…

python+paddleocr 进行图像识别、找到文字在屏幕中的位置

目录 前言 1、安装paddleocr 2、安装PIL 3、安装numpy 4、 安装pyautogui 5、进行文本识别 6、识别结果 7、获取文字在图片/屏幕中的位置 8、pyautoguipaddleocr鼠标操作 9、完整代码 前言 最近在做自动化测试,因为是处理过的界面,所以使用pyw…

在KeyarchOS上体验WildFly

一、浪潮信息KeyarchOS简单介绍 KeyarchOS具备稳定可靠、高效软硬协同、全天候运维、安全可信等特性,增强了对云计算、人工智能等场景的支持,性能稳定性领先,生态完善,符合金融、政务、能源、交通、通信、教育、医疗等关键行业的应用要求。具备非常广泛的应用。 官方地址&…

C#关于文件剖析

一、概述 文件,具有永久存储及特定顺序的字节组成的一个有序、具有名称的集合; 流,提供一种向后备存储写入字节和从后备存储读取字节的方式; 读写文件和目录时可使用简单的API,也可使用先进的API提供更多的功能&am…

前端必备技能!一文读懂如何调试node_module内源码

背景: 在项目开发中发现有一个bug问题可能原因出现在node_module内的包问题,但是发现直接调试该包源码是无法正常console的,这对于开发定位问题来说十分不友好。本文仅介绍如何定位npm包的问题和调试方法,但是要注意修改后再npm …

4G工业路由器智慧楼宇门禁无人值守、实时监控

门禁是我们日常生活中常见的基础设施,就像是现代社会智慧城市中的“门神”,在楼宇管理领域中普遍采用的安防卫士。4G工业路由器的物联网应用则为楼宇门禁管理带来了更加便捷和高效的解决方案。 在传统的楼宇门禁系统中,人员需要手动刷卡、输…

记录 | vscode设置自动换行

右上菜单栏 -> 查看 -> 打开自动换行 或者还有种方式,如下, 左下角小齿轮,点击设置 然后输入 Editor: Word Wrap ,把开关打开为 on

超声波清洗机可以洗哪些东西、功能超全超声波清洗机推荐

超声波清洗机可以清洗的物品是比较多的,首先最经常看见的就是眼镜是交给超声波清洗机清洗的,说到这点,佩戴眼镜的朋友是一定要重视起眼镜清洗的!眼镜长时间不清洗的话镜片以及眼镜支架缝隙中会堆积非常多细菌以及灰尘。所以一定要…

【Vue】element组件不显示问题

使用element组件但不显示 不显示的原因:(未引入element-ui) 首先在控制台输入 npm i element-ui 进行安装 安装完之后,再去main.js配置element-ui组件库 import ElementUI from element-ui import element-ui/lib/theme-chal…

【开源】基于Vue和SpringBoot的高校实验室管理系统

项目编号: S 015 ,文末获取源码。 \color{red}{项目编号:S015,文末获取源码。} 项目编号:S015,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

时光相册下载 时光相册停运

可以私信或加底部联系方式,小偿支持 很遗憾听到这个消息。时光相册是一个让用户分享和保存珍贵回忆的平台,但由于各种原因,它可能已经停止运营了。建议你尽快备份你的相册和保存重要照片和视频。同时,可以考虑使用其他相册服务来…

QT 中 多线程(备查)

基础 一个线程处理窗口事件,其他线程进行逻辑运算 在QT中使用多线程,需要额外注意的: 1)默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新 2)子线程负责后台…

Python插件 - 动态 简单账表 通过SQL存储过程输出列实现动态展示

第一步 新建一个简单账表加上表头标签 第二步 新建一个过滤框 第三步 修改过滤窗口标识 第四步 注册插件 python代码实现 import clr clr.AddReference("System") clr.AddReference("System.Core") clr.AddReference("Kingdee.BOS") clr.AddRe…

禁止ubuntu自动更新显卡驱动

​使用 apt-mark hold命令 apt-mark hold命令可以帮助我们锁定软件包的版本,防止 Ubuntu 自动更新该软件。 具体操作步骤如下: 1. 打开终端,使用以下命令来查看当前安装的显卡驱动软件包: dpkg -l | grep -i nvidia 2. 执行以…

Python 对中文名称逐字按字母表进行排序并输出

使用场景 代码适用于需要对中文名称进行排序并规范化输出的情景,具体为处理一个包含中文姓名的文本文件,按姓名的拼音首字母进行排序,并以规范的格式输出。 排序规则: 将名称按照姓氏首字母A-Z的次序,进行排序&#x…