Tabla de contenido
1. El propósito del experimento
1. Utilice la URL para leer el contenido del archivo en el servidor web y mostrarlo en la consola.
4. Escriba un programa para realizar la transmisión de archivos de red.
1. El propósito del experimento
1 . Comprender el uso de clases de URL ;
2. Dominar el uso de la clase InetAddress ;
3 . Domine el método de comunicación Socket , domine el uso de la clase Socket , domine el uso de la clase ServerSocket y domine la aplicación de comunicación usando el modo C / S.
2. Código experimental
1. Utilice la URL para leer el contenido del archivo en el servidor web y mostrarlo en la consola.
La dirección del servidor de red es de creación propia. Si la dirección puede ser
https://news.163.com/20/1123/10/FS43N0VS000189FH.html?clickfrom=w_yw 。
package 作业练习.test7;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class Study_1 {
public static void main(String[] args) throws Exception {
// 构建一URL对象
URL baidu = new URL("https://news.163.com/20/1123/10/FS43N0VS000189FH.html?clickfrom=w_yw");
//由URL对象获取URLConnection对象
URLConnection uc=baidu.openConnection();
//由URLConnection获取输入流,并构造BufferedReader对象
BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream()));
String inputLine;
// 循环读取并打印数据
while ((inputLine = br.readLine()) != null)
System.out.println(inputLine);
// 关闭输入流
br.close();
}
}
2. Utilice el método de la clase InetAddress para obtener la dirección IP del host de www.baidu.com (u otros nombres de dominio) , obtenga el nombre y la dirección IP de la máquina local .
package 作业练习.test7;
import java.io.*;
import java.net.*;
public class Study_2 {
public static void main(String[] args) {
String url = "www.baidu.com"; //任意一个网站的域名
InetAddress ip = null;
try {
ip = InetAddress.getByName(url); //得到对应的IP地址
InetAddress ipv4 = InetAddress.getLocalHost();
String nativeip = ipv4.getHostAddress().toString(); // Get local IP Address
System.out.println("Local IP Address: " + nativeip);
System.out.println("域名" + url + "对应的IP地址是:" + ip.toString());
} catch (UnknownHostException e) {
System.out.println("输入的URL有错!");
} catch (Exception e) {
e.printStackTrace();
}
}}
3. Utilice la clase Socket y la clase ServerSocket para escribir un programa C / S para realizar la comunicación C / S.
El cliente envía un comando de inicio al servidor , y el servidor devuelve la hora actual del servidor al cliente después de recibir la cadena; el cliente envía un comando de salida al servidor , y el servidor devuelve " Bye " al cliente y luego sale.
Sugerencia: dos estudiantes pueden trabajar en grupo, un estudiante simula el lado del servidor y el otro simula el lado del cliente .
package 作业练习.test7;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Study_3
{
public static void main(String args[])
{
try
{
Socket socket=new Socket("127.0.0.1",9000);//向本机的9000端口发出客户请求
System.out.println("客户端开启");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));//InputStreamReader是字节流通向字符流的桥梁,从底层流读取字节
//BufferedReader 从字符输入流中读取文本
PrintWriter os=new PrintWriter(socket.getOutputStream());//getOutputStream()返回此套接字的输出流
String readline;
readline=in.readLine();
while(!readline.equals("bye"))//若读入的字符串为bye,就停止循环
{
os.println(readline);//将读入的字符串输出到Server
os.flush();//刷新输出流,使Server马上收到该字符串
readline=in.readLine();
}
os.close();//关闭Socket输出流
socket.close();//关闭Socket
}catch(IOException e){System.out.println("error:"+e);}
}
}
package 作业练习.test7;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Study_3
{
public static void main(String args[])
{
try
{
Socket socket=new Socket("127.0.0.1",9000);//向本机的9000端口发出客户请求
System.out.println("客户端开启");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));//InputStreamReader是字节流通向字符流的桥梁,从底层流读取字节
//BufferedReader 从字符输入流中读取文本
PrintWriter os=new PrintWriter(socket.getOutputStream());//getOutputStream()返回此套接字的输出流
String readline;
readline=in.readLine();
while(!readline.equals("bye"))//若读入的字符串为bye,就停止循环
{
os.println(readline);//将读入的字符串输出到Server
os.flush();//刷新输出流,使Server马上收到该字符串
readline=in.readLine();
}
os.close();//关闭Socket输出流
socket.close();//关闭Socket
}catch(IOException e){System.out.println("error:"+e);}
}
}
4. Escriba un programa para realizar la transmisión de archivos de red.
Requisitos: Para realizar la transmisión en red de archivos de imágenes, es necesario asegurarse de que el cliente pueda recibir los archivos de imágenes completos.
package 作业练习.test7;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
//客户端:上传图片
public class CUploadPhotoClient {
public static void main(String[] args) throws Exception{
//1.连接诶服务器
Socket s = new Socket("192.168.190.1",5612);
System.out.println("已连接到服务器5612端口,准备传送图片...");
//获取图片字节流
FileInputStream fis = new FileInputStream("E:\\Intellij IDEL\\project\\src\\作业练习\\test7\\11.png");
//获取输出流
OutputStream out = s.getOutputStream();
byte[] buf = new byte[1024];
int len = 0;
//2.往输出流里面投放数据
while ((len = fis.read(buf)) != -1)
{
out.write(buf,0,len);
}
//通知服务端,数据发送完毕
s.shutdownOutput();
//3.获取输出流,接受服务器传送过来的消息“上传成功”
InputStream in = s.getInputStream();
byte[] bufIn = new byte[1024];
int num = in.read(bufIn);
System.out.println(new String(bufIn,0,num));
//关闭资源
fis.close();
out.close();
in.close();
s.close();
}
}
package 作业练习.test7;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class CUploadPhotoServer {
public static void main(String[] args) throws Exception{
//1.服务器开始监听5612端口
ServerSocket ss = new ServerSocket(5612);
System.out.println("服务端已启动,正在监听5612端口...");
//等待客户端
Socket s = ss.accept();
System.out.println("检测到客户端,准备数据接收...");
//客户端已连接,获取输入流
InputStream in = s.getInputStream();
//创建图片字节流
FileOutputStream fos = new FileOutputStream("server.png");
byte[] buf = new byte[1024];
int len = 0;
//往字节流里写图片数据
while ((len = in.read(buf)) != -1)
{
fos.write(buf,0,len);
}
//获取输出流,准备给客户端发送消息
OutputStream out = s.getOutputStream();
out.write("上传成功".getBytes());
//关闭资源
fos.close();
in.close();
out.close();
s.close();
ss.close();
}
}
Una palabra por texto
En lugar de pensar en el futuro, ¡es mejor agregar algo a su tiempo actual!