实验七 Java网络编程

目录

一、实验目的

二、实验代码

1. 使用URL读取网络服务器中的文件内容并显示在控制台上。

2. 使用InetAddress类的方法获取www.baidu.com(或者其他的域名)的主机的IP地址;获取本地机的名称和IP地址。

3. 利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。

4. 编写程序实现网络文件发送。

每文一语


一、实验目的

1.了解URL类的使用;

2. 掌握InetAddress类的使用;

3.掌握Socket通信方式,掌握Socket类的使用,掌握ServerSocket类的使用,掌握使用C/S模式进行通信的应用。

二、实验代码

1. 使用URL读取网络服务器中的文件内容并显示在控制台上。

网络服务器的地址自拟。如地址可以为

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. 使用InetAddress类的方法获取www.baidu.com(或者其他的域名)的主机的IP地址;获取本地机的名称和IP地址。

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. 利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。

客户端向服务器端发送Start命令,服务器端接收到该字符串后将服务器端当前时间返回给客户端;客户端向服务器端发送Exit命令,服务器端向客户端返回“Bye”后退出。

建议:可两个同学一组,一个同学模拟服务器端,另一个模拟端客户端

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. 编写程序实现网络文件发送。

要求:实现图片文件的网络传送,必须保证客户端能接收到完整的图片文件。

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();
    }

}

每文一语

与其给自己未来的遐想,不如给自己现在的时间加点料!

猜你喜欢

转载自blog.csdn.net/weixin_47723732/article/details/112952584