以前写的,照贴了。。。服务器端:import java.awt.*\x0d\x0aimport java.awt.event.WindowAdapter\x0d\x0aimport java.awt.event.WindowEvent\x0d\x0aimport java.io.*\x0d\x0aimport java.net.*/*6、 采用UDP协议,编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。\x0d\x0a* 客户端指定一个服务器上的文件名,让服务器发回该文件的内容,或者提示文件不存在。\x0d\x0a* (20分)(服务端程序和客户端程序分别命名为Server.java和Client.java)*/\x0d\x0apublic class N4BT6 extends Frame\x0d\x0a{\x0d\x0aDatagramSocket socket \x0d\x0aDatagramPacket packet byte[] buf \x0d\x0aFile file \x0d\x0aFileInputStream input\x0d\x0aString message = "该文件不存在"\x0d\x0aTextArea text\x0d\x0apublic N4BT6(String title)\x0d\x0a{\x0d\x0asuper(title)\x0d\x0atext = new TextArea(6,4)\x0d\x0aadd(text)\x0d\x0asetSize(400, 300)\x0d\x0asetVisible(true)\x0d\x0aaddWindowListener(new WindowAdapter()\x0d\x0a{\x0d\x0apublic void windowClosing(WindowEvent e)\x0d\x0a{\x0d\x0adispose()\x0d\x0a}\x0d\x0a})\x0d\x0a\x0d\x0abuf = new byte[1024]\x0d\x0atry\x0d\x0a{\x0d\x0asocket = new DatagramSocket(1230)\x0d\x0apacket = new DatagramPacket(buf, buf.length)\x0d\x0asocket.receive(packet)\x0d\x0afile = new File(new String(packet.getData()))\x0d\x0asocket = new DatagramSocket()\x0d\x0a} \x0d\x0acatch (Exception e)\x0d\x0a{e.printStackTrace()\x0d\x0a}\x0d\x0a\x0d\x0aif(file.exists())\x0d\x0a{\x0d\x0atry\x0d\x0a{\x0d\x0abuf = new byte[(int)file.length()]\x0d\x0apacket = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1234)\x0d\x0ainput = new FileInputStream(file)\x0d\x0ainput.read(buf)\x0d\x0asocket.send(packet)\x0d\x0a}\x0d\x0acatch (IOException e) \x0d\x0a{\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a}\x0d\x0aelse\x0d\x0a{\x0d\x0atry\x0d\x0a{\x0d\x0apacket = new DatagramPacket(message.getBytes(),message.getBytes().length,\x0d\x0aInetAddress.getLocalHost(),1234)\x0d\x0asocket.send(packet)\x0d\x0a}\x0d\x0acatch (Exception e) \x0d\x0a{\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0apublic static void main(String[] args)\x0d\x0a{\x0d\x0anew N4BT6("Server")\x0d\x0a}\x0d\x0a}\x0d\x0a客户端:import java.awt.*\x0d\x0aimport java.awt.event.*\x0d\x0aimport java.net.DatagramPacket\x0d\x0aimport java.net.DatagramSocket\x0d\x0aimport java.net.InetAddresspublic class N4BT6_2 extends Frame\x0d\x0a{\x0d\x0aTextArea text\x0d\x0aString message = "Q.txt"\x0d\x0aDatagramSocket socket \x0d\x0aDatagramPacket packet\x0d\x0abyte[] buf\x0d\x0apublic N4BT6_2(String title)\x0d\x0a{\x0d\x0asuper(title)\x0d\x0atext = new TextArea(6,4)\x0d\x0aadd(text)\x0d\x0asetSize(400, 300)\x0d\x0asetVisible(true)\x0d\x0aaddWindowListener(new WindowAdapter()\x0d\x0a{\x0d\x0apublic void windowClosing(WindowEvent e)\x0d\x0a{\x0d\x0adispose()\x0d\x0a}\x0d\x0a})\x0d\x0atry\x0d\x0a{\x0d\x0a\x0d\x0asocket = new DatagramSocket()\x0d\x0apacket = new DatagramPacket(message.getBytes(),message.getBytes().length,\x0d\x0aInetAddress.getLocalHost(),1230)\x0d\x0asocket.send(packet)\x0d\x0a}\x0d\x0acatch (Exception e) \x0d\x0a{\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a\x0d\x0atry\x0d\x0a{\x0d\x0abuf = new byte[1024]\x0d\x0asocket = new DatagramSocket(1234)\x0d\x0apacket = new DatagramPacket(buf,buf.length)\x0d\x0asocket.receive(packet)\x0d\x0atext.append(new String(buf))\x0d\x0a}\x0d\x0acatch (Exception e) \x0d\x0a{\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a}\x0d\x0apublic static void main(String[] args)\x0d\x0a{\x0d\x0anew N4BT6_2("Client")\x0d\x0a}\x0d\x0a}服务器端源码:\x0d\x0aimport java.io.BufferedReader\x0d\x0aimport java.io.File\x0d\x0aimport java.io.FileNotFoundException\x0d\x0aimport java.io.FileOutputStream\x0d\x0aimport java.io.IOException\x0d\x0aimport java.io.InputStream\x0d\x0aimport java.io.InputStreamReader\x0d\x0aimport java.net.ServerSocket\x0d\x0aimport java.net.Socket\x0d\x0a\x0d\x0a/**\x0d\x0a *\x0d\x0a * 文件名:ServerReceive.java\x0d\x0a * 实现功能:作为服务器接收客户端发送的文件\x0d\x0a *\x0d\x0a * 具体实现过程:\x0d\x0a * 1、建立SocketServer,等待客户端的连接\x0d\x0a * 2、当有客户端连接的时候,按照双方的约定,这时要读取一行数据\x0d\x0a * 其中保存客户端要发送的文件名和文件大小信息\x0d\x0a * 3、根据文件名在本地创建文件,并建立好流通信\x0d\x0a * 4、循环接收数据包,将数据包写入文件\x0d\x0a * 5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件\x0d\x0a * 6、文件接收工作结束\x0d\x0a\x0d\x0apublic class ServerReceive {\x0d\x0a \x0d\x0apublic static void main(String[] args) {\x0d\x0a \x0d\x0a/**与服务器建立连接的通信句柄*/\x0d\x0aServerSocket ss = null\x0d\x0aSocket s = null\x0d\x0a \x0d\x0a/**定义用于在接收后在本地创建的文件对象和文件输出流对象*/\x0d\x0aFile file = null\x0d\x0aFileOutputStream fos = null\x0d\x0a \x0d\x0a/**定义输入流,使用socket的inputStream对数据包进行输入*/\x0d\x0aInputStream is = null\x0d\x0a \x0d\x0a/**定义byte数组来作为数据包的存储数据包*/\x0d\x0abyte[] buffer = new byte[4096 * 5]\x0d\x0a \x0d\x0a/**用来接收文件发送请求的字符串*/\x0d\x0aString comm = null\x0d\x0a\x0d\x0a/**建立socekt通信,等待服务器进行连接*/\x0d\x0atry {\x0d\x0ass = new ServerSocket(4004)\x0d\x0as = ss.accept()\x0d\x0a} catch (IOException e) {\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a\x0d\x0a/**读取一行客户端发送过来的约定信息*/\x0d\x0atry {\x0d\x0aInputStreamReader isr = new InputStreamReader(s.getInputStream())\x0d\x0aBufferedReader br = new BufferedReader(isr)\x0d\x0acomm = br.readLine()\x0d\x0a} catch (IOException e) {\x0d\x0aSystem.out.println("服务器与客户端断开连接")\x0d\x0a}\x0d\x0a \x0d\x0a/**开始解析客户端发送过来的请求命令*/\x0d\x0aint index = comm.indexOf("/#")\x0d\x0a \x0d\x0a/**判断协议是否为发送文件的协议*/\x0d\x0aString xieyi = comm.substring(0, index)\x0d\x0aif(!xieyi.equals("111")){\x0d\x0aSystem.out.println("服务器收到的协议码不正确")\x0d\x0areturn\x0d\x0a}\x0d\x0a \x0d\x0a/**解析出文件的名字和大小*/\x0d\x0acomm = comm.substring(index + 2)\x0d\x0aindex = comm.indexOf("/#")\x0d\x0aString filename = comm.substring(0, index).trim()\x0d\x0aString filesize = comm.substring(index + 2).trim()\x0d\x0a\x0d\x0a/**创建空文件,用来进行接收文件*/\x0d\x0afile = new File(filename)\x0d\x0aif(!file.exists()){\x0d\x0atry {\x0d\x0afile.createNewFile()\x0d\x0a} catch (IOException e) {\x0d\x0aSystem.out.println("服务器端创建文件失败")\x0d\x0a}\x0d\x0a}else{\x0d\x0a/**在此也可以询问是否覆盖*/\x0d\x0aSystem.out.println("本路径已存在相同文件,进行覆盖")\x0d\x0a}\x0d\x0a \x0d\x0a/**【以上就是客户端代码中写到的服务器的准备部分】*/\x0d\x0a\x0d\x0a/**\x0d\x0a * 服务器接收文件的关键代码*/\x0d\x0atry {\x0d\x0a/**将文件包装到文件输出流对象中*/\x0d\x0afos = new FileOutputStream(file)\x0d\x0along file_size = Long.parseLong(filesize)\x0d\x0ais = s.getInputStream()\x0d\x0a/**size为每次接收数据包的长度*/\x0d\x0aint size = 0\x0d\x0a/**count用来记录已接收到文件的长度*/\x0d\x0along count = 0\x0d\x0a \x0d\x0a/**使用while循环接收数据包*/\x0d\x0awhile(count
回答于 2022-12-11
java网络编程应该怎样在客户端和服务器间实现通信?
给您推荐相同类型的内容:
每个开发人员都应该知道的16个顶级新计算机编程语言
函数式语言 Elixir Elixir 比 Erlang 更容易编写,具有 Haskell 等语言的函数式编程概念。Elixir是基于Erlang 虚拟机的,其广为人知的特点是运行低延时、分布式、可容错的系统,并成有线音响怎么连接电脑
用一副一头是3.5插头,另一头与有源音箱音频输入插座相匹配的音频线连接即可。把3.5插头插入电脑机箱后面的绿色插座内,另一头插入有源音箱的音频输入插座上,插上有源音箱的电源插头,打开电源开关,把音量调节旋钮调节在三分之一处。鼠标点击显示屏右叶绿体,在键盘上怎么打
叶绿体,在键盘上步骤为5步。1、将电脑开机,显示桌面状态。2、任意进入一种可以打字的模式。比如浏览器的搜索状态、建立一个文档或者是打开电脑底部的搜索框。3、进入打字模式后,将键盘的输入法切换成中文输入法。4、敲击L键,把声母打出来。再次敲击解决打开zip压缩包乱码的问题的方法是什么?
解决打开压缩文件乱码的具体步骤如下:1、首先我们打开电脑里的“控制面板”,点击“时钟与区域”。2、然后我们点击“区域”,点击“管理”,接着点击“更改系统区域设置”。3、然后我们在在弹出页面下拉选择“中文(简体,中国)”,然后点击“确定”。中介语石化之心理认知分析及对二语教学的启示
中介语石化之心理认知分析及对二语教学的启示 论文关键词:中介语石化、认知机制、二语教学、启示 论文摘要 :中介语是第二学习过程中学习者把母语语言规则转移到第二语言的语言规则、运用母语语言规则简化第Go语言怎么样?
根据Go趋势报告显示,全球范围内有 110 万专业开发者选择Go作为其主要开发语言。如果把以其他编程语言作为主要开发语言,同时也在使用Go的开发者计算在内,这一数字将高达270万,中国的Go语言开发者排名第一,全球占比超过16%。Go 语如何确定笔记本的内置无线模块是否损坏
如果确认驱动正常,有可能是无线网卡性能出现不稳定故障。有2个办法可以解决:1、拆下笔记本内无线网卡,自己到淘宝上去买一个换上(需要有一些修理电子产品的常识),不建议。2、买一外置wifi网卡(大小似U盘),查到电脑的USB口上安装驱动即可,如何彻底删除电脑上的office软件
操作步骤如下:1.我们拿手动删除Word2010来为例,当我们在进行安装Word2010的office时,有时候会出现这样的提示,这说明之前office Word 2010 没有卸载干净,那我们就要用手工来进行删除(如下图);2.双击电脑电脑键盘上双引号怎么打出?
1,在输入法为中文的情况下,按住shift+,组合命令进行输入;2,如图所示,就可以打出双引号了。如果电脑下载了其他输入可以在符号大全里边进行插入也可以。如何用键盘打出单引号?1、在键盘上找到图中的单双引号键,直接按下,屏幕就可以显示单引3的x次方用Python怎么写
Python中幂运算可以使用**表示,Python中三次方可以表示为x**3,即为x的3次方。**是Python中算术运算符表示幂运算,Python中算术运算符还有加、减、乘、除、取模、取整除。Python自定义函数在运行时,最初只是存在内java 的优势是什么?
JAVA的优势是什么?Java语言是目前的排行第一的语言,其优势也是非常突出的,那么具体体现在哪里呐?我来给你说一下Java的优势:1.java的风格类似C++但不同于C++,从某种意义上讲,java是C++的一个变种;2.javaGo语言list(列表)
2021-11-10 列表是一种非连续的存储容器,有多个节点组成,节点通过一些变量记录彼此之间的关系 单链表和双链表就是列表的两种方法。 原理:A、B、C三个人,B懂A的电话,C懂B的电话只是单方知道号码,这样就形成了一个单链表ado.net是什么意思?
ADO.NET是一组用于和数据源进行交互的面向对象类库。通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。 ADO.NET允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工陈大白用的是什么电脑
三四千组装电脑。根据陈大白自己说:自己用打游戏是时候耳机是插在电脑主机上面的,手机投屏到电脑,直接听电脑上面的音效。自己用的电脑也不是什么大牌子,是三四千组装的。陈大白,男,中国籍,2018年12月,参加西瓜视频《2018无法撤回》年终对话python比较2和02的大小
在定义上两者大小相等,因为数值上大小一样,相对值也一样。1、python的比较总是检查复合对象的所有部分,直到可以得出结果为止。2、会自动遍历嵌套的所有数据结构,有多深走多深,首次发现的差值将决定比较的结果3、==:操作符测试值的相等性4、JAVA多线程死锁问题
1. Java中导致死锁的原因Java中死锁最简单的情况是,一个线程T1持有锁L1并且申请获得锁L2,而另一个线程T2持有锁L2并且申请获得锁L1,因为默认的锁申请操作都是阻塞的,所以线程T1和T2永远被阻塞了。导致了死锁。这是最容易理解也怎么在电脑键盘里打出符号呢?
方法如下:1.电脑键盘上特殊符号和标点符号的输入方法:~!@#¥%……&*()——+|。中文状态下,我们按下键盘上Shift键+主键盘区的数字区的键,从左右至右就可以输入:~!@#¥%……&*()——+|符enscape安装教程
enscape安装教程方法如下:工具:华硕A456U,win10系统,enscape。1、首先,点击“V-Ray_2_0_for_sketchup_2015_64位_顶渲简体中文加强版_2015_03_08-x1”之后会弹出的一个授权码生成指定RGB值的纯色图像【python】
创建图像: ·OpenCV中,黑白图像实际是一个二维数组,彩色图像是一个三维数组。 数组中每个元素就是图像对应位置的像素值 ·数组索引、像素行列、像素坐标关系如下: 数组行索引 = 像素所在行数 - 1 = 像素纵坐标Python网页解析库:用requests-html爬取网页
Python 中可以进行网页解析的库有很多,常见的有 BeautifulSoup 和 lxml 等。在网上玩爬虫的文章通常都是介绍 BeautifulSoup 这个库,我平常也是常用这个库,最近用 Xpath 用得比较多,使用 Beau为什么Python语言火遍全球
1、Python相比别的高级编程语言集成度更高,除了执行的效率低些,开源可以调用的类库实在太多了,要实现一个功能,如果换作传统的编程语言,需要实现基本的功能模块,但直接调用类库很方便的搞定,特别适合零基础学习,几行代码就能实现非常强大的功能Java程序的运行机制是怎么样的?
Java程序的运行机制可以分为以下几个步骤:编写Java源代码:首先,程序员需要使用Java编程语言编写源代码。Java源代码是以.java为扩展名的文本文件,包含了Java程序的逻辑和功能。编译Java源代码:Java源代码需要通过Ja如何配置一台适合爸妈使用的台式电脑?
给老人配置一台合适电脑需要注意以下几个方面:可以承受的高性价比父母一般是给我们做儿女的付出的很多,而对他们自己也多数时候是精打细算的过日子,所以一般来说 全新的话配置 我个人推荐 I3 9100F 主板用B365M 4java桌面应用程序可以控制模拟器吗安卓
首先是电脑的java模拟器。在做测试以前在搜索引擎中将两个模拟器下载下来。自然是下载安全无毒的java模拟器。电脑使用的是exe文件但是常以rar打包。安卓智能机是apk文件。我使用的java模拟器是个绿色软件,也就是说无需安装。解压压缩包如何从三星s7edge 手机上把照片传到电脑上
以三星s7edge 手机为例:1.将三星手机的数据线一端链接三星手机,一端链接电脑,当数据线接入电脑后,手机上会出现提示,选择“媒体设备”。2.电脑上也会出现提示,选择“导入图片和视频”。3.点击“导入图片和视频”之后,三星手机上的照片就求最新JAVA面试题目,越全越好!!!
Java面试不光有面试也会有笔试,为了让java应聘笔试题能顺利通过,中公优就业·浙江IT培训的小U老师整理了一些java笔试题及答案分享给大家,准备或将要参加java面试的朋友可以仔细阅读,争取一次通过,进去自己心仪的企业工作。一、九道选都有哪些软件可以学习电脑?
学习的可以有很多,比如说基本的办公软件(word,excel,ppt),简单的图形图像处理软件(photoshop),编程软件(CC++,C#,java等),制作网页(ASP.net,dreamweaver,php,cms等)这些很多在网Excel怎么能把前面的序号打印出来
工具材料:电脑、Excel。第一步,打开电脑,打开软件,加载好需要打印的文档,点击开始。第二步,找到左边菜单栏的打印点击进入第三步,在打印界面下拉菜单栏,找到页面设置点击进入。第四步,进入界面后找到打印-行号列标点击勾选。第五步,勾选完成电脑怎么恢复出厂设置
计算机内置的 F10 系统恢复出厂设置功能,能短时间内帮您将计算机系统恢复到初始状态。一、F10 恢复出厂设置操作前须知:1.系统恢复出厂会删除 C 盘中数据(包含桌面文件、下载、文档等)和安装在 C 盘的软件,您可以勾选备份 C 盘个人文MAC下的Ruby环境
Mac内部默认是有 ruby 环境的,可以通过 ruby -v 命令查看当前的版本。 如果说要修改当前的Ruby版本,这个时候需要用到 rvm 工具,这款工具的全称是 Ruby Version Manager ,顾名思义它就是用来管理