当前位置: 首页 > news >正文

做淘宝那样的网站要多少钱wordpress本地化采用方法

做淘宝那样的网站要多少钱,wordpress本地化采用方法,徐汇手机网站建设,房地产网站建设联系方式项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter21/src 网络 一、网络相关概念 1.网络通讯 1.概念:两台设备之间通过网络实现数据传输 2.网络通信:将数据通过网络从一台设备传输到另一台设备 3. java.net包下提供了一系列的类或接口供程序员使用完成网络通信 1. 2.网络 概念:两台或多台设备通过一定物理设备连接起来构成了网络 2.根据网络的覆盖范围不同对网络 进行分类: 局域网:覆盖范围最小仅仅覆盖一个教室或一个机房 城域网:覆盖范围较大可以覆盖个城市 广域网:覆盖范围最大可以覆盖全国甚至全球万维网是广域网的代表 3.IP地址 1.概念:用于唯一标识网络中的每台计算机/主机 2.查看ip地址: ipconfig 3. ip地址的表示形式:点分十进制xx.xxx.xx 4.每一个十进制数的范围: 0~255 5. ip地址的组成网络地址主机地址比如: 192.168.16.69 对于IPV44个字节(32位)表示 1个字节的范围是0~255  6. iIPv6是互联网工程任务组设计的用于替代IPv4的下一 代IP协议其地址数量号称可以为全世界的每一粒沙子编上一 个地址。使用16机制表示 7.由于IPv4最大的问题在于网络地址资源有限严重制约了互联网的应用和发展。IPv6的使用不仅能解决网络地址资源数量的问题而且也解决了多种接入设备连入互联的障碍 4.域名 1. www.baidu.com 2.好处:为了方便记忆解决记ip的困难 3.概念:将ip地址映射成域名 5.端口号 1.概念:用于标识计算机上某个特定的网络程序 2.表示形式:以整数形式范围0~ 65535 两个字节表示 3.0~1024已经被占用比如ssh 22, ftp 21, smtp 25 http 80 在网络开发中不要使用0 - 1024的端口 4.常见的网络程序端口号: tomcat :8080 mysql:3306 oracle:1521 sqlserver:1433 6.网络通讯协议 TCP/IP (Transmission Control Protocol/Internet Protocol)的简写 中文译名为传输控制协议/因特网互联协议又叫网络通讯协议这个协议是Internet最基本的协议、Internet国际互联网络的基础简单地说就是由网络层的IP协议和传输层的TCP协议组成的。 TCP协议:传输控制协议 1.使用TCP协议前须先建立TCP连接形成传输数据通道 2.传输前采用三次握手方式是可靠的 3. TCP协议进行通信的两个应用进程:客户端、服务端 4.在连接中可进行大数据量的传输 5.传输完毕需释放已建立的连接效率低 UDP协议: 1.将数据、源、目的封装成数据包不需要建立连接 2.每个数据报的大小限制在64K内不适合传输大量数据 3.因无需连接故是不可靠的 4.发送数据结束时无需释放资源(因为不是面向连接的)速度快 5.举例:厕所通知 二、InetAddress类 1.相关方法 1.获取本机InetAddress对象getL ocalHost 2.根据指定主机名/域名获取ip地址对象getByName 3.获取InetAddress对象的主机名getHostName 4.获取InetAddress对象的地址getHostAddress public class API_ {public static void main(String[] args) throws UnknownHostException {//1. 获取本机的InetAddress 对象InetAddress localHost InetAddress.getLocalHost();System.out.println(localHost);//DESKTOP-9UOSPK2/192.168.0.105//2. 根据指定主机名 获取 InetAddress对象InetAddress host1 InetAddress.getByName(DESKTOP-9UOSPK2);System.out.println(host1 host1);//DESKTOP-9UOSPK2/192.168.0.105//3. 根据域名返回 InetAddress对象, 比如 www.baidu.com 对应InetAddress host2 InetAddress.getByName(www.baidu.com);System.out.println(host2 host2);//www.baidu.com / 14.119.104.254//4. 通过 InetAddress 对象获取对应的地址String hostAddress host2.getHostAddress();//IP 110.242.68.4System.out.println(host2 对应的ip hostAddress);//14.119.104.254//5. 通过 InetAddress 对象获取对应的主机名/或者的域名String hostName host2.getHostName();System.out.println(host2对应的主机名/域名 hostName); // www.baidu.com} }三、Socket 1.基本介绍 1.套接字(Socket)开发网络应用程序被厂泛采用以至于成为事实上的标准。 2.通信的两端都要有Socket,是两台机器间通信的端点 3.网络通信其实就是Socket间的通信。 4. Socket允许程序把网络连接当成一个流数据在两个Socket间通过I0传输。 5. 一般主动发起通信的应用程序属客户端等待通信请求的为服务端 示意图: 2.TCP网络通信编程 基本介绍 1.基于客户端一服务端的网络通信 2.底层使用的是TCP/IP协议 3.应用场景举例:客户端发送数据服务端接受并显示 4.基于Socket的TCP编程 应用案例1 1.编写一个服务器端和一个客户端 2.服务器端在9999端口监听 3.客户端连接到服务器端发送hello,server”,然后退出 4.服务器端接收到客户端发送的信息输出并退出 服务端 public class SocketTCP01Server {public static void main(String[] args) throws IOException {//要求 该port端口没有其他服务在监听9999//ServerSocket可以对应多个socket //细节:这个ServerSocket 可以通过accept() 返回多个Socket[多个客户端连接服务器的并发]ServerSocket serverSocket new ServerSocket(9999);System.out.println(服务端在9999端口监听等待连接);//如果没有客户端连接9999程序会阻塞等待连接//如果有客户端连接则会返回socket对象程序继续Socket socket serverSocket.accept();System.out.println(服务端socket socket.getClass());//io读取InputStream inputStream socket.getInputStream();byte[] buf new byte[1024];int readLen 0;while ((readLen inputStream.read(buf) )! -1){System.out.println(new String(buf,0,readLen));}inputStream.close();socket.close();serverSocket.close();} }客户端 public class SocketTCP01Client {public static void main(String[] args) throws IOException {//解读: 连接本机的 9999端口, 如果连接成功返回Socket对象Socket socket new Socket(InetAddress.getLocalHost(), 9999);System.out.println(客户端 socket返回 socket.getClass());//2. 连接上后生成Socket, 通过socket.getOutputStream()// 得到 和 socket对象关联的输出流对象OutputStream outputStream socket.getOutputStream();//3. 通过输出流写入数据到 数据通道outputStream.write(hello world.getBytes());//4. 关闭流对象和socket, 必须关闭outputStream.close();socket.close();System.out.println(客户端退出...);} }应用案例2 1.编写个服务端和一个客户端 2.服务器端在9999端口监听 3.客户端连接到服务端发送hello, server并接收服务器端回发的hello,client, 再退出 4.服务器端接收到客户端发送的信息输出并发送hello, client, 再退出 注意在案例1的基础上更改需要在服务端Out字节流完之后告诉客户端我发送完毕否则程序不知道什么时候结束需要设置一个结束标记socket.shutdownOutput()案例1是因为客户端关闭了才结束的。 服务端 public class SocketTCP02Server {public static void main(String[] args) throws IOException {//该port端口没有其他服务在监听9999//1.创建ServerSocket服务端//ServerSocket可以对应多个socket //细节:这个ServerSocket 可以通过accept() 返回多个Socket[多个客户端连接服务器的并发]ServerSocket serverSocket new ServerSocket(9999);System.out.println(服务端在9999端口监听等待连接);//2.获取socket管道//如果没有客户端连接9999程序会阻塞等待连接//如果有客户端连接则会返回socket对象程序继续Socket socket serverSocket.accept();System.out.println(服务端socket socket.getClass());//3.回去客户端写入管道的数据InputStream inputStream socket.getInputStream();//4.io读取byte[] buf new byte[1024];int readLen 0;while ((readLen inputStream.read(buf) )! -1){System.out.println(new String(buf,0,readLen));}socket.shutdownInput();//设置关闭读取标记//5.获取socket相关联的输出流OutputStream outputStream socket.getOutputStream();outputStream.write(hello client by server.getBytes());//6.关闭流inputStream.close();outputStream.close();socket.close();serverSocket.close();} }客户端 public class SocketTCP02Client {public static void main(String[] args) throws IOException {//解读: 连接本机的 9999端口, 如果连接成功返回Socket对象Socket socket new Socket(InetAddress.getLocalHost(), 9999);System.out.println(客户端 socket返回 socket.getClass());//2. 连接上后生成Socket, 通过socket.getOutputStream()// 得到 和 socket对象关联的输出流对象OutputStream outputStream socket.getOutputStream();//3. 通过输出流写入数据到 数据通道outputStream.write(hello server by client .getBytes());socket.shutdownOutput();//设置发送完毕标记//4.获取和socket关联的输入流读取数据(字节)并显示InputStream inputStream socket.getInputStream();byte[] buf new byte[1024];int readLen 0;while ((readLen inputStream.read(buf)) ! -1){System.out.println(new String(buf,0,readLen));}//5. 关闭流对象和socket, 必须关闭outputStream.close();socket.close();System.out.println(客户端退出...);} } 应用案例3 1.编写一个服务端和一个客户端 2.服务端在9999端口监听 3.客户端连接到服务端发送hello, server并接收服务端回发的hello,client,再退出 4.服务端接收到客户端发送的信息输出并发送hello, client,再退出 服务端 public class SocketTCP03Server {public static void main(String[] args) throws IOException {//该port端口没有其他服务在监听9999//1.创建ServerSocket服务端//ServerSocket可以对应多个socket //细节:这个ServerSocket 可以通过accept() 返回多个Socket[多个客户端连接服务器的并发]ServerSocket serverSocket new ServerSocket(9999);System.out.println(服务端在9999端口监听等待连接);//2.获取socket管道//如果没有客户端连接9999程序会阻塞等待连接//如果有客户端连接则会返回socket对象程序继续Socket socket serverSocket.accept();System.out.println(服务端socket socket.getClass());//3.转成字符流 获取客户端写入管道的数据BufferedReader bufferedReader new BufferedReader(new InputStreamReader(socket.getInputStream()));//4.io读取String line;while ((line bufferedReader.readLine())! null){System.out.println(line \r\n);}socket.shutdownInput();//设置关闭读取标记//5.获取socket相关联的输出流 并转成字符流BufferedWriter bufferedWriter new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//6.写入数据bufferedWriter.write(hello client by server);bufferedWriter.newLine();//插入一个换行符表示写入的内容结束注意要求对方使用readLine()!!!!bufferedWriter.flush();socket.shutdownOutput();//设置发送完毕标记//6.关闭流socket.close();serverSocket.close();} }客户端 public class SocketTCP03Client {public static void main(String[] args) throws IOException {//解读: 连接本机的 9999端口, 如果连接成功返回Socket对象Socket socket new Socket(InetAddress.getLocalHost(), 9999);System.out.println(客户端 socket返回 socket.getClass());//2. 连接上后生成Socket, 通过socket.getOutputStream()// 得到 和 socket对象关联的输出流对象//3.将output转成writer 通过输出流写入数据到 数据通道BufferedWriter bufferedWriter new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write(hello server by client );bufferedWriter.newLine();//插入一个换行符表示写入的内容结束注意要求对方使用readLine()!!!!bufferedWriter.flush();//如果使用的字符流需要手动刷新否则数据不会写入数据通道//4.关闭输出流socket.shutdownOutput();//设置发送完毕标记 即便是字符流而且没有显式的定义OutputStream也需要关闭//5.获取和socket关联的输入流读取数据(字节)并显示//6.转成ReaderBufferedReader bufferedReader new BufferedReader(new InputStreamReader(socket.getInputStream()));String line;while ((line bufferedReader.readLine())!null){System.out.println(line \r\n);}// socket.shutdownInput();//5. 关闭流对象和socket, 必须关闭bufferedReader.close();socket.close();System.out.println(客户端退出...);} } 应用案例4 1.编写一个服务端和一个客户端 2.服务器端在8888端口监听 3.客户端连接到服务端发送一张图片e:\qie.png 4.服务器端接收到客户端发送的图片保存到src下发送收到图片再退出 5.客户端接收到服务端发送的收到图片再退出 6.该程序要求使用StreamUtils.java 客户端 public class SocketTCP03Client {public static void main(String[] args) throws IOException {//解读: 连接本机的 9999端口, 如果连接成功返回Socket对象Socket socket new Socket(InetAddress.getLocalHost(), 9999);System.out.println(客户端 socket返回 socket.getClass());//2. 连接上后生成Socket, 通过socket.getOutputStream()// 得到 和 socket对象关联的输出流对象//3.将output转成writer 通过输出流写入数据到 数据通道BufferedWriter bufferedWriter new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write(hello server by client );bufferedWriter.newLine();//插入一个换行符表示写入的内容结束注意要求对方使用readLine()!!!!bufferedWriter.flush();//如果使用的字符流需要手动刷新否则数据不会写入数据通道//4.关闭输出流socket.shutdownOutput();//设置发送完毕标记 即便是字符流而且没有显式的定义OutputStream也需要关闭//5.获取和socket关联的输入流读取数据(字节)并显示//6.转成ReaderBufferedReader bufferedReader new BufferedReader(new InputStreamReader(socket.getInputStream()));String line;while ((line bufferedReader.readLine())!null){System.out.println(line \r\n);}// com.yinhai.socket.shutdownInput();//5. 关闭流对象和socket, 必须关闭bufferedReader.close();socket.close();System.out.println(客户端退出...);} }服务端 public class SocketTCP04Server {public static void main(String[] args) throws Exception {ServerSocket serverSocket new ServerSocket(8888);Socket socket serverSocket.accept();InputStream inputStream socket.getInputStream();BufferedInputStream bufferedInputStream new BufferedInputStream(inputStream);//该方法已经读到了数组byte[] bytes StreamUtils.streamToByteArray(bufferedInputStream);//将得到的byte数组写入到指定的路径String receptionPath src\\com\\yinhai\\socket\\upload\\serverReceptionFile\\mikuByServer.jpg;BufferedOutputStream bufferedOutputStream new BufferedOutputStream(new FileOutputStream(receptionPath));bufferedOutputStream.write(bytes);bufferedOutputStream.flush();BufferedWriter bufferedWriter new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write(Server已收到客户端传来的文件,文件创建在 receptionPath);bufferedWriter.newLine();bufferedWriter.flush();socket.shutdownOutput();//关闭流bufferedOutputStream.close();socket.close();bufferedInputStream.close();bufferedWriter.close();} }netset指令  1. netstat - an可以查看当前主机网络情况包括端口监听情况和网络连接情况 2. netstat - an | more可以分页显示 3.要求在dos控制台下执行 说明: (1) Listening表示某个端口在监听 (2)如果有一个外部程序(客户端)(外部地址)连接到该端口就会显示一条连接信息 使用netstat -anb | more可以查看是哪个程序正在监听 需要以管理员身份启动 细节 当客户端连接到服务端后实际上客户端也是通过一个端口和服务端进行通讯的这个端口是TCP/IP来分配的 特别注意 对于 ObjectOutputStream它本身包含了更多的信息能够更好地表示对象的边界因此不需要显式地调用 shutdownOutput。 当你使用 BufferedWriter 写入数据时并没有类似于换行符的标志来表示数据的结束所以你需要通过 shutdownOutput 来显式关闭输出流。 当你使用 OutputStream 直接写入字节时也需要调用 shutdownOutput 来表示数据的结束。 因为在Java中ObjectOutputStream 是用于将对象序列化为字节流的类。这个类会将对象的数据以及对象的类型信息一并写入输出流中。在这个过程中ObjectOutputStream 会使用一些特殊的标记和格式来标识不同的对象并在读取时还原这些信息。 底层的工作原理涉及到Java序列化机制以下是一些关键概念 序列化 将对象转换为字节流的过程称为序列化。在Java中对象要想序列化必须实现 Serializable 接口。 对象流的特殊处理 ObjectOutputStream 和 ObjectInputStream 会处理对象的序列化和反序列化。它们会使用特殊的标记来表示对象的类型、字段等信息。 对象边界 在对象流中每个写入的对象都被看作是一个边界。ObjectOutputStream 会负责处理对象的序列化包括将对象的类型信息写入流中以便在反序列化时正确还原对象。 由于 ObjectOutputStream 在写入对象时已经包含了足够的信息来表示对象的边界所以在正常情况下不需要显式地调用 shutdownOutput 来关闭输出流。关闭输出流的目的是告知对方数据发送结束但对于 ObjectOutputStream 来说对象边界的信息已经足够表示数据的结束。 总体来说这是Java序列化机制和 ObjectOutputStream 的设计使得在对象流中不需要显式关闭输出流而字节流和字符流需要显式关闭以确保对方能够正确判断数据的结束。 3.UDP网络通信编程 1.基本介绍 1.类DatagramSocket和DatagramPacket[数据包/数据报]实现了基于UDP协议网络程序。 2. UDP数据报通过数据报套接字DatagramSocket发送和接收系统不保证UDP数据报一定能够安全送到目的地也不能确定什么时候可以抵达。 3. DatagramPacket 对象封装了UDP数据报在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。 4. UDP协议中每个数据报都给出了完整的地址信息因此无须建立发送方和接收方的连接 2.UDP说明 1.没有明确的服务端和客户端演变成数据的发送端和接收端 2.接收数据和发送数据是通过DatagramSocket对象完成 3.将数据封装到DatagramPacket对象/装包 4.当接收到DatagramPacket对象,需要进行拆包取出数据 5. DatagramSocket可以指定在哪个端接收数据 3.基本流程 1.核心的两个类/对象DatagramSocket与DatagramPacket 2.建立发送端接收端(没有服务端和客户端概念) 3.发送数据前建立数据包/报DatagramPacket对象 4.调用DatagramSocket的发送、接收方法 5.关闭DatagramSocket 4.案例1  1.编写一个接收端A和一个发送端B 2.接收端A在9999端口等待接收数据(receive) 3.发送端A向接收端B发送数据hello 明天吃火锅~ 4.接收端B接收到发送端A发送的数据回复好的明天见再退出 5.发送端接收回复的数据再退出 接收端 public class UDPReceiverA {public static void main(String[] args) throws IOException {//创建一个DatagramSocket对象 准备在9999端口接收DatagramSocket datagramSocket new DatagramSocket(9999);//2.构建数据包准备接收数据,一个数据包最大为64kbyte[] buf new byte[1024];DatagramPacket datagramPacket new DatagramPacket(buf, buf.length);//3.调用接收方法通过网络传输的packet对象填充到packet对象内datagramSocket.receive(datagramPacket);//如果没有数据包发送过来就会阻塞等待//4.把packet拆包并显示int length datagramPacket.getLength();//实际接收到的长度byte[] data datagramPacket.getData();//接受数据String s new String(data, 0, length);System.out.println(s);//接受到后发送ok回去byte[] bytes OK,I get it and hello UDPSender.getBytes();DatagramPacket datagramPacket1 new DatagramPacket(bytes, bytes.length, InetAddress.getByName(192.168.0.105),9998);datagramSocket.send(datagramPacket1);//5.关闭资源datagramSocket.close();} }发送端 public class UDPSenderB {public static void main(String[] args) throws IOException {//1.创建DatagramSocket对象准备发送和数据该对象 可以接受和发送DatagramSocket datagramSocket new DatagramSocket(9998);//准备在9998等别人的发送数据//2.将需要发送的数据封装到packet对象中byte[] bytes hello UDPReceiver.getBytes();//说明:封装的DatagramPacket对象(内容字节数组data.Length ,主机(IP) ,端口)DatagramPacket datagramPacket new DatagramPacket(bytes, bytes.length, InetAddress.getByName(192.168.0.105), 9999);datagramSocket.send(datagramPacket);byte[] buf new byte[1024];DatagramPacket datagramPacket1 new DatagramPacket(buf, buf.length);//3.调用接收方法通过网络传输的packet对象填充到packet对象内datagramSocket.receive(datagramPacket1);//如果没有数据包发送过来就会阻塞等待//4.把packet拆包并显示int length datagramPacket1.getLength();//实际接收到的长度byte[] data datagramPacket1.getData();//接受数据String s new String(data, 0, length);System.out.println(s);datagramSocket.close();} }四、本章作业 1. 服务端 public class Homework01Server {public static void main(String[] args) throws IOException {//该port端口没有其他服务在监听9999//1.创建ServerSocket服务端//ServerSocket可以对应多个socket //细节:这个ServerSocket 可以通过accept() 返回多个Socket[多个客户端连接服务器的并发]ServerSocket serverSocket new ServerSocket(9999);System.out.println(服务端在9999端口监听等待连接);//2.获取socket管道//如果没有客户端连接9999程序会阻塞等待连接//如果有客户端连接则会返回socket对象程序继续//3.转成字符流 获取客户端写入管道的数据//4.io读取while (true) {Socket socket serverSocket.accept();BufferedReader bufferedReader new BufferedReader(new InputStreamReader(socket.getInputStream()));String line;String answer null;while ((line bufferedReader.readLine()) ! null) {if (line.equals(name)) {answer My name is yinhai;} else if (hobby.equals(line)) {answer My favor to compile program;}else if (exit.equals(line)){answer exit;}else {answer Sorry , about that cant understand with me;}}socket.shutdownInput();//5.获取socket相关联的输出流 并转成字符流BufferedWriter bufferedWriter new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//6.写入数据bufferedWriter.write(answer);bufferedWriter.newLine();//插入一个换行符表示写入的内容结束注意要求对方使用readLine()!!!!bufferedWriter.flush();socket.shutdownOutput();//设置发送完毕标记if (answer.equals(exit)){socket.close();break;}}//6.关闭流serverSocket.close();} }客户端 public class Homework01Client {public static void main(String[] args) throws IOException {while (true) {Socket socket new Socket(InetAddress.getLocalHost(), 9999);Scanner scanner new Scanner(System.in);System.out.println(请输入你的问题);String next scanner.next();BufferedWriter bufferedWriter new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write(next);bufferedWriter.newLine();//插入一个换行符表示写入的内容结束注意要求对方使用readLine()!!!!bufferedWriter.flush();//如果使用的字符流需要手动刷新否则数据不会写入数据通道//4.关闭输出流socket.shutdownOutput();//设置发送完毕标记 即便是字符流而且没有显式的定义OutputStream也需要关闭//5.获取和socket关联的输入流读取数据(字节)并显示//6.转成ReaderBufferedReader bufferedReader new BufferedReader(new InputStreamReader(socket.getInputStream()));String line;while ((line bufferedReader.readLine()) ! null) {System.out.println(line \r\n);}if(next.equals(exit)){socket.close();break;}// com.yinhai.socket.shutdownInput();//5. 关闭流对象和socket, 必须关闭bufferedReader.close();}System.out.println(客户端退出...);}}2.  发送端 public class Homework02SenderB {public static void main(String[] args) throws IOException {//1.创建 DatagramSocket 对象准备在9998端口 接收数据DatagramSocket socket new DatagramSocket(9998);//2. 将需要发送的数据封装到 DatagramPacket对象Scanner scanner new Scanner(System.in);System.out.println(请输入你的问题: );String question scanner.next();byte[] data question.getBytes(); ////说明: 封装的 DatagramPacket对象 data 内容字节数组 , data.length , 主机(IP) , 端口DatagramPacket packet new DatagramPacket(data, data.length, InetAddress.getByName(192.168.12.1), 8888);socket.send(packet);//3. 接收从A端回复的信息//(1) 构建一个 DatagramPacket 对象准备接收数据// 在前面讲解UDP 协议时老师说过一个数据包最大 64kbyte[] buf new byte[1024];packet new DatagramPacket(buf, buf.length);//(2) 调用 接收方法, 将通过网络传输的 DatagramPacket 对象// 填充到 packet对象//老师提示: 当有数据包发送到 本机的9998端口时就会接收到数据// 如果没有数据包发送到 本机的9998端口, 就会阻塞等待.socket.receive(packet);//(3) 可以把packet 进行拆包取出数据并显示.int length packet.getLength();//实际接收到的数据字节长度data packet.getData();//接收到数据String s new String(data, 0, length);System.out.println(s);//关闭资源socket.close();System.out.println(B端退出);} }接受端 public class Homework02ReceiverA {public static void main(String[] args) throws IOException {//1. 创建一个 DatagramSocket 对象准备在8888接收数据DatagramSocket socket new DatagramSocket(8888);//2. 构建一个 DatagramPacket 对象准备接收数据// 在前面讲解UDP 协议时老师说过一个数据包最大 64kbyte[] buf new byte[1024];DatagramPacket packet new DatagramPacket(buf, buf.length);//3. 调用 接收方法, 将通过网络传输的 DatagramPacket 对象// 填充到 packet对象System.out.println(接收端 等待接收问题 );socket.receive(packet);//4. 可以把packet 进行拆包取出数据并显示.int length packet.getLength();//实际接收到的数据字节长度byte[] data packet.getData();//接收到数据String s new String(data, 0, length);//判断接收到的信息是什么String answer ;if(四大名著是哪些.equals(s)) {answer 四大名著 红楼梦 三国演示 西游记 水浒传;} else {answer what?;}//回复信息给B端//将需要发送的数据封装到 DatagramPacket对象data answer.getBytes();//说明: 封装的 DatagramPacket对象 data 内容字节数组 , data.length , 主机(IP) , 端口packet new DatagramPacket(data, data.length, InetAddress.getByName(192.168.12.1), 9998);socket.send(packet);//发送//5. 关闭资源socket.close();System.out.println(A端退出...);} }3. 服务端 public class Homework03Server {public static void main(String[] args) throws Exception {ServerSocket serverSocket new ServerSocket(9999);Socket socket serverSocket.accept();InputStream inputStream socket.getInputStream();byte[] b new byte[1024];int len 0;String downloadFileName ;while ((len inputStream.read(b))! -1){downloadFileName new String(b,0,len);}System.out.println(downloadFileName);//服务器上有两个文件 无名.mp3 高山流水.mp3//如果下载的是高山流水返回该文件否则一律返回无名String resFileName ;if(高山流水.equals(downloadFileName)){resFileName src\\高山流水.mp3;}else{resFileName src\\无名.mp3;}//创建输入流读取文件BufferedInputStream bufferedInputStream new BufferedInputStream(new FileInputStream(resFileName));//使用工具类byte[] bytes StreamUtils.streamToByteArray(bufferedInputStream);//得到socket相关的输出流BufferedOutputStream bufferedOutputStream new BufferedOutputStream(socket.getOutputStream());bufferedOutputStream.write(bytes);bufferedOutputStream.flush();socket.shutdownOutput();//关闭相关的资源inputStream.close();bufferedInputStream.close();bufferedOutputStream.close();socket.close();serverSocket.close();System.out.println(关闭服务端);} }客户端 public class Homework03Client {public static void main(String[] args) throws Exception {//接受用户输入 准备从服务端下载Scanner scanner new Scanner(System.in);System.out.println(请输入要下载的名字);String downloadFileName scanner.next();Socket socket new Socket(InetAddress.getLocalHost(),9999);OutputStream outputStream socket.getOutputStream();BufferedOutputStream bufferedOutputStream new BufferedOutputStream(outputStream);bufferedOutputStream.write(downloadFileName.getBytes());bufferedOutputStream.flush();socket.shutdownOutput();InputStream inputStream socket.getInputStream();BufferedInputStream bufferedInputStream new BufferedInputStream(inputStream);byte[] bytes1 StreamUtils.streamToByteArray(bufferedInputStream);String fileName ;if(downloadFileName.equals(高山流水)){fileName 高山流水;}else {fileName 无名;}String filePath src\\com\\yinhai\\homework\\downloadFile\\ fileName .mp3 ;BufferedOutputStream bufferedOutputStream1 new BufferedOutputStream(new FileOutputStream(filePath));bufferedOutputStream1.write(bytes1);bufferedOutputStream1.flush();bufferedInputStream.close();bufferedOutputStream.close();bufferedOutputStream1.close();socket.close();} }
http://www.pierceye.com/news/609691/

相关文章:

  • 什么网站可以做名片网站后台登陆密码忘记
  • 韩式摄影网站源码内蒙古建设安全监督站的网站
  • 做阿里巴巴网站可以贷款吗印尼做网站的教学 中文
  • 做旅游宣传不错的网站成都制作网站的公司简介
  • 上海网站制作优化app软件开发平台游戏
  • 江苏省通信建设交易中心网站PHP+Ajax网站开发典型实例
  • 邵阳市住房和建设局网站中国万网商城
  • 网站设计建设流程wordpress删除插件
  • 微信属于营销型网站江苏茂盛建设有限公司网站
  • 电商网站源代码企业推广是什么意思
  • 企业型网站网站建设与网页设计案例教程 重庆大学出版社
  • owasp 网站开发什么网站可以做全景图
  • 做一个宣传网站要多少钱东莞松山湖网站建设
  • 沧州网站制作的流程让蜘蛛不抓取网站的文件夹
  • 高端网站建设电话昆明做网站公司
  • 建网站一般用什么工具wordpress企业主题免费
  • 新手建设html5网站官方网站开发制作
  • 网页版拍图搜题seo的流程是怎么样的
  • 吴中区做网站那个网站可以找人做设计师
  • 光效网站网站建设方案浩森宇特
  • 亚马逊网站入口英文专业的网站设计
  • 赤水市白房建设局网站企业网站如何进行定位
  • 有私人做网站的吗网页界面设计方法
  • 免费 网站模板中国建设银行总行门户网站
  • 网站推广的方式公司组网
  • 推广 网站的优秀文案劳务输送网站建设方案
  • 特色的岑溪网站开发济南响应式网站开发
  • 网站源码官网招聘网站内容建设
  • 网站如何布局wordpress 商城系统
  • 深圳专业设计网站平台网站开发国内外现状研究