一、实验目的
二、实验代码
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模式进行通信的应用。
网络服务器的地址自拟。如地址可以为
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();
}
}
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();
}
}}
客户端向服务器端发送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);}
}
}
要求:实现图片文件的网络传送,必须保证客户端能接收到完整的图片文件。
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();
}
}
与其给自己未来的遐想,不如给自己现在的时间加点料!