100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Java网络编程 韩顺平 自学笔记

Java网络编程 韩顺平 自学笔记

时间:2020-01-22 06:21:46

相关推荐

Java网络编程 韩顺平 自学笔记

这里写目录标题

网络编程网络通信网络ip地址ipv4地址分类域名端口号网络通信协议TCP和UDPTCP协议:传输控制协议UDP协议InetAddress类相关方法代码示例Socket基本介绍TCP网络通信编程基本介绍练习1练习2练习3方法一:socket.shutdownOutput()写方法二:bufferedWriter.newLine()写练习4netstat指令TCP网络不为人知的秘密UDP网络通信编程(了解)基本介绍示意图基本流程课后练习练习1课后作业作业1普通版作业1升级版作业2作业3

网络编程

网络通信

概念:两台设备之间通过网络实现数据传递网络通信:将数据通过网络从一台设备传输到另一台设备包下提供了一系列的类或者接口,供程序员完成网络通讯。

网络

概念:两台或者多台设备通过一定物理设备连接起来构成了网络根据网络的覆盖范围不同,对网络进行分类:

局域网:覆盖范围最小,仅仅覆盖了一个教室或者一个机房

城域网:覆盖范围较大,可以覆盖一个城市

广域网:覆盖范围最大,可以覆盖全国,甚至全球,万维网是广域网的代表

ip地址

概念:用于唯一标识网络中的每台计算机/主机查看ip地址:ipconfigip地址的表示形式:点分十进制 XX.XX.XX.XX每一个十进制数的范围:0~255ip地址的组成:网络地址+主机地址,比如192.169.12.69IPv6是互联网工程任务组设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为地球上的每一粒沙子编上一个地址由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展IPv6的使用,不仅能解决网络地址资源数量的问题,而且还解决了多种设备接入互联网的障碍。IPv4 :4个字节 IPv6:16个字节

ipv4地址分类

域名

好处:方便记忆,解决记ip的困难概念:将ip地址映射成域名

端口号

概念:用于表示计算机上某个特定的网络程序表示形式:以整数形式,范围0~65535 (2个字节)0~1024已经被占用,比如ssh 22,ftp 21,smtp 25,http 80常间的网络程序端口

tomcat:8080

mysql:3306

oracle:1521

sqlserver:1433

网络通信协议

协议(tcp/ip)

TCP/IP中文译名为传输控制协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成。

TCP和UDP

TCP协议:传输控制协议

使用TCP协议前,预先建立TCP连接,形成传输数据通道传输前,采用"三次握手"方式,是可靠的TCP协议进行通信的两个应用进程:客户端、服务端在连接中可进行最大数据量的传输传输完毕,需要释放自己建立的连接,效率低

UDP协议

将数据、源、目的封装成数据包,不需要建立连接每个数据报的大小限制在64K以内因无需连接,故是不可靠的发送数据结束时无需释放资源(因为不是面向连接的),速度快举例:厕所通知:发短信

InetAddress类

相关方法

获取本机InetAddress对象,getLocalHost根据指定主机名、域名获取ip地址对象,getByName获取InetAddress对象的主机名 getHostName获取InetAddress对象的地址 getHostAddress

代码示例

package InetAddressUse;import org.junit.Test;import java.lang.annotation.Target;import .InetAddress;import .UnknownHostException;/*** @author wty* @date /10/23 18:00*/public class InetAddressUse {@Testpublic void InetUse() throws UnknownHostException {/*** 1. 获取本机InetAddress对象,getLocalHost* 2. 根据指定主机名、域名获取ip地址对象,getByName* 3. 获取InetAddress对象的主机名 getHostName* 4. 获取InetAddress对象的地址 getHostAddress*/InetAddress localHost = InetAddress.getLocalHost();System.out.println(localHost); // 获取 计算机名+本机的ip MagicBook15-wty/192.168.12.1 老韩IPInetAddress byName = InetAddress.getByName("MagicBook15-wty");// 根据机器名称获取InetAddress对象System.out.println(byName);// 根据域名获取到InetAddress对象InetAddress baidu = InetAddress.getByName("");System.out.println(baidu);// 通过InetAddress对象,获取主机地址String ipHost = baidu.getHostAddress();System.out.println("ipHost 对应的主机地址是;" + ipHost);// 通过InetAddress对象,获取主机名/域名String nameHost = baidu.getHostName();System.out.println("ipHost 对应的主机域名是;" + nameHost);String name = localHost.getHostName();System.out.println("localHost对应的主机名是:" + name);}}

Socket

基本介绍

套接字(Socket)开发网络应用程序被广泛采用,以至于称为事实上的标准。通信的两端都要有Socket,是两台机器间通信的端点网络通信其实就是Socket间的通信Socket允许程序把网络连成一个流,数据在两个Socket间通过IO传输。一般主动发起通信的应用程序属于客户端,等待通信请求的为服务端。

TCP网络通信编程

基本介绍

基于客户端——服务端的网络通信底层使用的是TCP/IP协议应用场景举例:客户端发送数据,服务端接收并显示基于Socket的TCP编程

练习1

客户端代码示例:

package SocketServerandClient;import org.junit.Test;import java.io.IOException;import java.io.OutputStream;import .InetAddress;import .ServerSocket;import .Socket;import .UnknownHostException;/*** @author wty* @date /10/23 19:07* 客户端*/public class Client {@Testpublic void getClientFun() throws IOException {// 1.连接服务器 ip, 端口号Socket socket = new Socket(InetAddress.getLocalHost(), 9999);// 如果连接成功返回Socket对象System.out.println("客户端Socket对象的运行类型是:" + socket.getClass());// 2.连接上之后,生成Socket通过 socket.getOutputStream()// 得到和Socket 对象关联的 输出流对象// 3.通过输出流,写入数据到数据通道OutputStream outputStream = socket.getOutputStream();outputStream.write("hello,server".getBytes());// 关闭流和Soceket对象outputStream.close();socket.close();System.out.println("客户端退出");}}

服务器端代码示例:

package SocketServerandClient;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import .ServerSocket;import .Socket;/*** @author wty* 服务器端*/public class ServerSocketExercise {@Testpublic void serverSocketFun() throws IOException {// 在本机999端口监听,等待连接// 要求本机9999端口没有被占用// ServerSocket可以通过accept()返回多个Socket,可以用于并发ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务器端在9999端口监听,等待连接中…………");// 当没有客户端连接9999端口时,程序会阻塞,等待连接// 如果有客户端连接的话,会返回一个Socket对象Socket accept = serverSocket.accept();System.out.println("socket的运行类型:" + accept.getClass());// 通过socket.getInputStream()读取客户端写入数据通道的数据InputStream inputStream = accept.getInputStream();byte[] bytes = new byte[8];int count = 0;while ((count = inputStream.read(bytes)) != -1){System.out.print(new String(bytes,0,count));}accept.close();inputStream.close();serverSocket.close();}}

练习2

客户端:

package SocketServerandClient;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .InetAddress;import .ServerSocket;import .Socket;/*** @author wty* @date /10/23 19:56*/public class ClientHomeWork02 {@Testpublic void getClientHomeWork02() throws IOException {Socket socket = new Socket(InetAddress.getLocalHost(), 9999);OutputStream outputStream = socket.getOutputStream();outputStream.write("hello server".getBytes());socket.shutdownOutput();InputStream inputStream = socket.getInputStream();int count = 0;byte[] bytes = new byte[8];System.out.println("客户端接收到来自服务器端返回的指令:");while ((count = inputStream.read(bytes)) != -1) {System.out.print(new String(bytes, 0, count));}System.out.println();socket.close();outputStream.close();inputStream.close();System.out.println("客户端退出");}}

服务端

package SocketServerandClient;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .InetAddress;import .ServerSocket;import .Socket;/*** @author wty* @date /10/23 19:56*/public class ServerHomeWork02 {@Testpublic void getServerHomeWork02() throws IOException {ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务器端在9999端口等待监听…………");Socket socket = serverSocket.accept();InputStream inputStream = socket.getInputStream();int count = 0;byte[] bytes = new byte[8];System.out.println("服务器端接收到数据消息为:");while ((count = inputStream.read(bytes))!= -1){System.out.print(new String(bytes,0,count));}System.out.println();OutputStream outputStream = socket.getOutputStream();outputStream.write("hello client".getBytes());socket.shutdownOutput();serverSocket.close();socket.close();inputStream.close();outputStream.close();System.out.println("服务器端退出");}}

练习3

方法一:socket.shutdownOutput()写

客户端

package SocketServerandClient;import org.junit.Test;import java.io.*;import .InetAddress;import .Socket;/*** @author wty* @date /10/23 22:56** 客户端 字符流*/public class ClientHomeWork03 {@Testpublic void getClientHomeWork03() throws IOException {Socket socket = new Socket(InetAddress.getLocalHost(), 9999);BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write("hello server");// 字符流必须刷新!!!!!!!!!bufferedWriter.flush();socket.shutdownOutput(); // !!!!注意必须放在flush下面关闭BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String str = "";System.out.println("客户端接收到来自服务端发送的信息:");while ((str = bufferedReader.readLine())!= null){System.out.println(str);}// 流是后打开的先关闭socket.close();bufferedReader.close();bufferedWriter.close();System.out.println("客户端结束");}}

服务端

package SocketServerandClient;import org.junit.Test;import java.io.*;import .ServerSocket;import .Socket;/*** @author wty* @date /10/23 22:55** 服务端 字符流*/public class ServerHomeWork03 {@Testpublic void getServerHomeWork03() throws IOException {ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端等待9999端口监听中……………………");Socket socket = serverSocket.accept();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String str = "";System.out.println("服务端接收到来自客户端发送的信息:");while ((str = bufferedReader.readLine())!= null){System.out.println(str);}BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write("hello,client");// 字符流必须刷新!!!!!!!!!bufferedWriter.flush();socket.shutdownOutput(); // 注意必须放在flush()后面关闭serverSocket.close();socket.close();bufferedWriter.close();bufferedReader.close();System.out.println("服务端结束");}}

方法二:bufferedWriter.newLine()写

客户端

package SocketServerandClient;import org.junit.Test;import java.io.*;import .InetAddress;import .Socket;/*** @author wty* @date /10/23 22:56** 客户端 字符流*/public class ClientHomeWork03 {@Testpublic void getClientHomeWork03() throws IOException {Socket socket = new Socket(InetAddress.getLocalHost(), 9999);BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write("hello server");// 结束标记 == socket.shutdownOutput();bufferedWriter.newLine(); // 要求对方读取的时候要用readLine()// 字符流必须刷新!!!!!!!!!bufferedWriter.flush();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String str = "";/** // 因为下面用了bufferedWriter.newLine()* // 这里再循环就是错误的了** while ((str = bufferedReader.readLine())!= null){* System.out.println(str);* }*/System.out.println("客户端接收到来自服务端发送的信息:");str = bufferedReader.readLine();System.out.println(str);// 流是后打开的先关闭socket.close();bufferedReader.close();bufferedWriter.close();System.out.println("客户端结束");}}

服务器端

package SocketServerandClient;import org.junit.Test;import java.io.*;import .ServerSocket;import .Socket;/*** @author wty* @date /10/23 22:55** 服务端 字符流*/public class ServerHomeWork03 {@Testpublic void getServerHomeWork03() throws IOException {ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端等待9999端口监听中……………………");Socket socket = serverSocket.accept();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String str = "";System.out.println("服务端接收到来自客户端发送的信息:");/** // 因为下面用了bufferedWriter.newLine()* // 这里再循环就是错误的了** while ((str = bufferedReader.readLine())!= null){* System.out.println(str);* }*/str = bufferedReader.readLine();System.out.println(str);BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write("hello,client");// 结束标记 == socket.shutdownOutput();// 要求对方读取的时候要用readLine(),// 并且使用了newLine后上面str = bufferedReader.readLine()不能循环bufferedWriter.newLine();// 字符流必须刷新!!!!!!!!!bufferedWriter.flush();serverSocket.close();socket.close();bufferedWriter.close();bufferedReader.close();System.out.println("服务端结束");}}

练习4

韩老师的工具类

package SocketServerandClient;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;/*** 此类用于演示关于流的读写方法**/public class StreamUtils {/*** 功能:将输入流转换成byte[], 即可以把文件的内容读入到byte[]* @param is* @return* @throws Exception*/public static byte[] streamToByteArray(InputStream is) throws Exception{ByteArrayOutputStream bos = new ByteArrayOutputStream();//创建输出流对象byte[] b = new byte[1024];//字节数组int len;while((len=is.read(b))!=-1){//循环读取bos.write(b, 0, len);//把读取到的数据,写入bos}byte[] array = bos.toByteArray();//然后将bos 转成字节数组bos.close();return array;}/*** 功能:将InputStream转换成String* @param is* @return* @throws Exception*/public static String streamToString(InputStream is) throws Exception{BufferedReader reader = new BufferedReader(new InputStreamReader(is));StringBuilder builder= new StringBuilder();String line;while((line=reader.readLine())!=null){builder.append(line+"\r\n");}return builder.toString();}}

客户端

package SocketServerandClient;import org.junit.Test;import java.io.*;import .InetAddress;import .Socket;/*** @author wty* @date /10/24 0:01* 客户端*/public class ClientHomeWork05 {@Testpublic void getClientHomeWork05() throws Exception {// 读取E盘中的图片String path = "E:\\wb.png";BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(path));// 用工具类转换成byte数组byte[] bytes = StreamUtils.streamToByteArray(new FileInputStream(path));Socket socket = new Socket(InetAddress.getLocalHost(), 9999);// 用socket传递给传输通道BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());bufferedOutputStream.write(bytes);socket.shutdownOutput();System.out.println("客户端发送图片成功!");String str = StreamUtils.streamToString(socket.getInputStream());System.out.println(str);socket.close();bufferedOutputStream.close();bufferedInputStream.close();System.out.println("客户端退出");}}

服务端

package SocketServerandClient;import org.junit.Test;import java.io.*;import .ServerSocket;import .Socket;/*** @author wty* @date /10/24 0:01* 服务端*/public class ServerHomeWork04 {@Testpublic void getServerHomeWork04() throws Exception {String target = "src\\wb.png";ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端正在监听9999端口………………");// 等待连接Socket socket = serverSocket.accept();// 取到 传输通道中的文件BufferedInputStream bufferedInputStream = new BufferedInputStream(socket.getInputStream());BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(target));byte[] bytes = StreamUtils.streamToByteArray(bufferedInputStream);bufferedOutputStream.write(bytes); // 这里拷贝文件无需循环System.out.println("服务端图片保存完毕!");// 发送收到图片BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write("收到图片");bufferedWriter.flush(); // 把内容刷新到内容通道socket.shutdownOutput();bufferedWriter.close();bufferedOutputStream.close();bufferedInputStream.close();serverSocket.close();System.out.println("服务端退出");}}

netstat指令

stat -an 可以查看当前主机网络情况,包括端口监听情况和网络连接情况

stat -an | more 可以分页显示,分页后空格显示下一页,回车显示下一行

stat -anb 可以查看具体是哪个程序在占用端口

4.要求在dos控制台下执行

说明:

(1)Listening表示某个端口在监听

(2)如果有一个外部程序(客服端)连接到该端口,就会显示一条ESTABLISHED连接信息

(3)可以输入CTRL + C退出指令

TCP网络不为人知的秘密

当客户端连接到服务端后,实际上客户端也是通过一个端口和服务端进行通讯的这个端口是TCP/IP来分配的,是不确定的,是随机的。

UDP网络通信编程(了解)

基本介绍

示意图

基本流程

课后练习

练习1

UDP接收端

package udp;import org.junit.Test;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import .SocketException;/*** @author wty* @date /10/24 12:50* <p>* udp编程 接收端*/public class ReceivePort {@Testpublic void getReceivePort() throws IOException {// 1.创建一个DatagramSocket对象,准备在9999接收数据DatagramSocket datagramSocket = new DatagramSocket(9999);// 2.构建一个DatagramPacket对象准备接收数据,UDP协议一个数据报最大是64Kbyte[] bytes = new byte[64 * 1024];DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);// 3.调用接收方法:将数据通道的DatagramPacket对象,填充到datagramPacket中// 有数据发送过来,就会接收// 没有数据发送过来,就会阻塞System.out.println("接收方9999端口等待发送方发送的数据…………");datagramSocket.receive(datagramPacket);// 4.拆包 取出数据:int length = datagramPacket.getLength();// 实际接收到的数据长度byte[] data = datagramPacket.getData();// 把数据输出System.out.println("接收端收到了来自发送端发送的:");System.out.println(new String(data, 0, length));// 5. 接收到数据后,发送数据String str = "hi my name is world";datagramPacket = new DatagramPacket(str.getBytes(), 0 , str.length() , InetAddress.getByName("192.168.12.1"),9998); // 老韩的IP//datagramPacket = new DatagramPacket(str.getBytes(), 0 , str.length() , InetAddress.getLocalHost(),9998);datagramSocket.send(datagramPacket);// 6.关闭socketdatagramSocket.close();}}

UDP发送端

package udp;import org.junit.Test;import java.io.IOException;import .*;/*** @author wty* @date /10/24 12:49* <p>* udp编程 发送端*/public class SendPort {@Testpublic void getSendPort() throws IOException {// 1.创建datagramSocket准备在9998端口接收数据DatagramSocket datagramSocket = new DatagramSocket(9998);// 2.装包:String str = "hello world";DatagramPacket datagramPacket = new DatagramPacket(str.getBytes(), 0, str.length(), InetAddress.getByName("192.168.12.1"),9998); // 老韩的IP//DatagramPacket datagramPacket = new DatagramPacket(str.getBytes(), 0, str.length(), InetAddress.getLocalHost(), 9999);// 这里先用自己的主机替代// 3.发送datagramSocket.send(datagramPacket);// 4.接收来自接收端收到的接收信息byte[] bytes = new byte[64 * 1024];datagramPacket = new DatagramPacket(bytes,0,bytes.length);datagramSocket.receive(datagramPacket);// 5.拆包byte[] data = datagramPacket.getData();int length = datagramPacket.getLength();System.out.println("发送端接收到接收端的回复:");System.out.println(new String(data, 0, length));// 6.关闭连接datagramSocket.close();}}

课后作业

作业1普通版

客户端

package HomeWork01;import org.junit.Test;import java.io.*;import .InetAddress;import .Socket;import java.util.Scanner;/*** @author wty* @date /10/24 17:05*/public class ClientFun {@Testpublic void getClientFun() throws IOException {Socket socket = new Socket(InetAddress.getLocalHost(),9999);BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));System.out.println("请输入你想了解的事情:");Scanner scanner = new Scanner(System.in);String next = scanner.next();bufferedWriter.write(next);bufferedWriter.flush();socket.shutdownOutput();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String s = bufferedReader.readLine();System.out.println("客户端接收到服务端返回的:");System.out.println(s);// 关闭相应的流bufferedReader.close();bufferedWriter.close();socket.close();}}

服务端

package HomeWork01;import org.junit.Test;import java.io.*;import .InetAddress;import .ServerSocket;import .Socket;/*** @author wty* @date /10/24 17:05*/public class ServerFun {@Testpublic void getServerFun() throws IOException {String serverName = InetAddress.getLocalHost().getHostName();ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端等待9999端口监听…………");Socket socket = serverSocket.accept();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String s = bufferedReader.readLine();System.out.println("服务端接收到客户端发送的:");System.out.println(s);switch (s){case "name":s = "我是" + serverName;break;case"hobby":s = "编写Java程序";break;default:s = "你说啥呢,老弟儿?";}// 接收到语句后返回相应语句BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write(s);bufferedWriter.flush();socket.shutdownOutput();// 关闭相应的流bufferedWriter.close();bufferedReader.close();serverSocket.close();socket.close();}}

作业1升级版

在作业1普通版的基础上,实现循环问问题的功能

客户端

package HomeWork01;import org.junit.Test;import java.io.*;import .InetAddress;import .Socket;import java.util.Scanner;/*** @author wty* @date /10/24 17:05*/public class ClientFun {@Testpublic void getClientFun() throws IOException {String next = "";while (!"q".equals(next)){Socket socket = new Socket(InetAddress.getLocalHost(), 9999);BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));System.out.println("请输入你想了解的事情,输入q退出:");Scanner scanner = new Scanner(System.in);next = scanner.next();bufferedWriter.write(next);bufferedWriter.flush();socket.shutdownOutput();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String s = bufferedReader.readLine();System.out.println("客户端接收到服务端返回的:");System.out.println(s);// 关闭相应的流bufferedReader.close();bufferedWriter.close();socket.close();}System.out.println("你已退出了会话");}}

服务端

package HomeWork01;import org.junit.Test;import java.io.*;import .InetAddress;import .ServerSocket;import .Socket;/*** @author wty* @date /10/24 17:05*/public class ServerFun {@Testpublic void getServerFun() throws IOException {String s = "";while (!"q".equals(s)){String serverName = InetAddress.getLocalHost().getHostName();ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端等待9999端口监听…………");Socket socket = serverSocket.accept();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));s = bufferedReader.readLine();System.out.println("服务端接收到客户端发送的:");System.out.println(s);String return_Str = "";switch (s){case "name":return_Str = "我是" + serverName;break;case"hobby":return_Str = "编写Java程序";break;default:return_Str = "你说啥呢,老弟儿?";}// 接收到语句后返回相应语句BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write(return_Str);bufferedWriter.flush();socket.shutdownOutput();// 关闭相应的流bufferedWriter.close();bufferedReader.close();serverSocket.close();socket.close();}System.out.println("退出了服务端");}}

作业2

发送端

package HomeWork02;import org.junit.Test;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import java.util.Scanner;/*** @author wty* @date /10/24 18:06*/public class SendWork {@Testpublic void getSendWork() throws IOException {DatagramSocket datagramSocket = new DatagramSocket(9999);System.out.println("请输入你想提出的问题:");Scanner scanner = new Scanner(System.in);String next = scanner.next();DatagramPacket datagramPacket = new DatagramPacket(next.getBytes(), 0, next.getBytes().length, InetAddress.getLocalHost(), 9998);datagramSocket.send(datagramPacket);// 发送端接收到接收端回应的数据并展示byte[] bytes = new byte[64 * 1024];datagramPacket = new DatagramPacket(bytes, bytes.length);datagramSocket.receive(datagramPacket);int length = datagramPacket.getLength();byte[] data = datagramPacket.getData();String s = new String(data, 0, length);System.out.println("发送端接收到的数据是:");System.out.println(s);datagramSocket.close();System.out.println("发送端退出");}}

接收端

package HomeWork02;import org.junit.Test;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;/*** @author wty* @date /10/24 18:06*/public class ReceiveWork {@Testpublic void getReceiveWork() throws IOException {DatagramSocket datagramSocket = new DatagramSocket(9998);byte[] bytes = new byte[64 * 1024];DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);System.out.println("接收端正在监听9998端口…………");datagramSocket.receive(datagramPacket);int length = datagramPacket.getLength();byte[] data = datagramPacket.getData();String s = new String(data, 0, length);System.out.println("接收到的来此发送端的数据是:");System.out.println(s);String return_str = "";switch (s) {case "四大名著是哪些":return_str = "红楼梦、西游记、水浒传、三国演义";break;default:return_str = "what?";}// 接收端接收到数据后,继续发送回应datagramPacket = new DatagramPacket(return_str.getBytes(), 0, return_str.getBytes().length, InetAddress.getLocalHost(), 9999);datagramSocket.send(datagramPacket);datagramSocket.close();System.out.println("接收端退出");}}

作业3

客户端

package MusicDownLoad;import org.junit.Test;import java.io.*;import .InetAddress;import .Socket;import java.util.Scanner;/*** @author wty* @date /10/24 22:45* 客户端*/public class ClientPortMusic {@Testpublic void getClientPortMusic() throws Exception {System.out.println("请输入一个文件名称");Scanner scanner = new Scanner(System.in);String musicName = scanner.next();Socket socket = new Socket(InetAddress.getLocalHost(), 9999);BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write(musicName);bufferedWriter.flush();socket.shutdownOutput();// 获取服务端发送过来的文件String path = "E:\\" + musicName + ".mp3";BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(path));BufferedInputStream bufferedInputStream = new BufferedInputStream(socket.getInputStream());byte[] bytes = StreamUtils.streamToByteArray(bufferedInputStream);bufferedInputStream.read(bytes);bufferedOutputStream.write(bytes, 0, bytes.length);bufferedOutputStream.flush();System.out.println("文件:" + path + "下载完成!");socket.close();bufferedInputStream.close();bufferedOutputStream.close();bufferedWriter.close();System.out.println("客户端退出");}}

服务端

package MusicDownLoad;import org.junit.Test;import java.io.*;import .ServerSocket;import .Socket;/*** @author wty* @date /10/24 22:45* 服务端*/public class ServerPortMusic {@Testpublic void getServerPortMusic() throws Exception {// 1.监听客户端ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端监听9999端口等待文件传递………………");// 2.等待客户端连接Socket socket = serverSocket.accept();String musicName = StreamUtils.streamToString(socket.getInputStream());System.out.println("musicName:" + musicName);musicName = musicName.replace("\r\n", "");String path = "";//String fileName = "";switch (musicName) {case "同学你好":path = "src\\同学你好.mp3";//fileName = "同学你好.mp3";break;case "无声拥抱":path = "src\\无声拥抱.mp3";//fileName = "无声拥抱.mp3";break;case "香格里拉":path = "src\\香格里拉.mp3";//fileName = "香格里拉.mp3";break;default:path = "src\\default.mp3";//fileName = "default.mp3";}BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(path));BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());byte[] bytes = StreamUtils.streamToByteArray(bufferedInputStream);bufferedInputStream.read(bytes);System.out.println("读取文件: " + path + " 完毕!");bufferedOutputStream.write(bytes, 0, bytes.length);bufferedOutputStream.flush();socket.shutdownOutput();// 关闭流serverSocket.close();socket.close();bufferedOutputStream.close();bufferedInputStream.close();System.out.println("服务端退出");}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。