(1)运用网络地址获取网页信息浅用。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;
class getinformation_website {
public boolean find(String webl) {
int length = 0;
try {
URL is = new URL(webl);//建立与所需读取信息网络的连接。
InputStream open = is.openStream();//创建一个输入流对象。
exization("test.html");//判断此文件是否存在
FileOutputStream out = new FileOutputStream("test.html");//创建字节输出流,将数据读入此文件中
BufferedInputStream input = new BufferedInputStream(open);//字符输入流,并创建数据缓冲区
BufferedOutputStream output = new BufferedOutputStream(out);//字符输出流,创建数据缓冲区
byte[] box = new byte[1024 * 20];
//将网络信息打印到显示屏上。
System.out.println("*********************打印网页信息如下********************");
while ((length = input.read(box, 0, box.length)) != -1) {
String s = new String(box);
System.out.println(s);
output.write(box, 0, box.length);
}
open.close();
out.close();
input.close();
output.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (length != 0)
return true;
else
return false;
}
}
public void exization(String R) throws IOException {
File fip = new File(R);
if (fip.exists()) {
fip.delete();//文件存在则删除
}
fip.createNewFile();//创建以R为名的文本。
}
}
public class getinformation {
public static void main(String[] args) {
//主函数
getinformation_website web = new getinformation_website();
Scanner input = new Scanner(System.in);
System.out.println("请输入需要获取网站的网址信息:");
String webl = input.nextLine();
input.close();
if (web.find(webl))
System.out.println("获取指定网络信息成功!");
else
System.out.println("信息获取失败!");
}
}
(2)运用TCP编程原理实现客户端和服务端简单交互。
注:运行代码时应先运行服务端代码。
1.服务端代码:
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
class LTCPserver {
public void tcps() {
Scanner input = new Scanner(System.in);// 标准输入
try {
ServerSocket open = new ServerSocket(6666);// 创建端口号
Socket tcpser = open.accept();// 等待客户端的连接
if (tcpser != null)// 判断连接是否成功
{
System.out.println("服务器接收到来自" + tcpser.getInetAddress().getHostAddress() + "的连接");
System.out.println("可以与客户端进行对话");
while (true) {
OutputStream os = tcpser.getOutputStream();// 创建可以向连接的客户端进行字节输出流对象。
// 创建字符打印流,向客户端可以打印信息(即发送信息,其中具有字节缓冲输出流)。
// OutputStreamWriter:字符转换输出流
PrintWriter autor = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(os)));
System.out.print("请输入向客户端待发送的信息:");
String mesage = input.nextLine();
autor.println(mesage);// 向客户端发送信息。
autor.flush();// 清空缓冲区的数据
InputStream is = tcpser.getInputStream();// 创建与客户端相连接的字节输入流。
// 以字符流的方式接收来自客户端的信息,并建立数据缓冲区
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String apt = reader.readLine();
if (apt.equals("quit"))// 若接收数据为《quit》则关闭服务器,结束交流。(可自由更改此条件)
{
System.out.println("本次会话到此结束!");
tcpser.shutdownInput();
tcpser.shutdownOutput();
autor.close();
reader.close();
break;
} else {
System.out.println("客户端向你发来消息说:" + apt);
}
}
} else
System.out.println("无客户端连接!");
input.close();
open.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class TCPserver {
public static void main(String[] args) throws InterruptedException {
LTCPserver find = new LTCPserver();
find.tcps();
}
}
2.客户端代码
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
class LTcpclient {
public void Tcpc() {
try {
// 客户端连接需要服务器的ip地址,和端口号。
Socket accpet = new Socket(InetAddress.getLocalHost(), 6666);
Scanner input = new Scanner(System.in);
if (accpet != null) {
System.out.println("连接服务端成功!");
System.out.println("接下来可选择和服务端进行对话,发送<quit>将结束对话!");
while (true) {
// 以下与服务端同理
InputStream setmasege = accpet.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(setmasege));
String opt = reader.readLine();
System.out.println("服务端说:" + opt);
OutputStream seller = accpet.getOutputStream();
PrintWriter opn = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(seller)));
System.out.print("请输入向服务端待发送的信息:");
String seter = input.nextLine();
opn.println(seter);
opn.flush();
if (seter.equals("quit")) {
opn.close();
accpet.shutdownInput();
accpet.shutdownOutput();
reader.close();
break;
}
}
input.close();
accpet.close();
} else {
System.out.println("服务器连接失败!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("服务器连接失败或断开连接!");
System.out.println("打印失败原因:" + e.getMessage());
}
}
}
public class TCPclient {
public static void main(String[] args) {
LTcpclient accpet = new LTcpclient();
accpet.Tcpc();
}
}
(3)使用UDP编程原理实现交互
注:UDP协议无需建立客户端可服务器的连接,故没有严格的服务端和客户端的划分,为不可靠协议,不过传输效率快。
1.服务端代码
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.Scanner;
//UDP编程发送信息和接收信息都需要封装成包,注意包内所应具备的信息。
class server {
public void setser() {
try {
DatagramSocket open = new DatagramSocket(6666);
Scanner input = new Scanner(System.in);
while (true) {
byte[] box = new byte[1024 * 18];
DatagramPacket paket = new DatagramPacket(box, box.length);// 将接收信息封装为包
open.receive(paket);// 接收客户端信息
String message = new String(paket.getData(), 0, box.length);
if (message.equals("goodbye")) {
break;
} else {
System.out.println("收到来自客户端的信息:" + message);
System.out.print("请输入给客户端回复的信息:");
message = input.nextLine();
box = message.getBytes();
if (message.equals("goodbye")) {// 结束聊天需要双向结束
System.out.println("本次聊天到此结束,感谢你的使用!");
input.close();
open.close();
break;
}
DatagramPacket setpaket = new DatagramPacket(box, 0, box.length, paket.getAddress(),
paket.getPort());// 将发送信息封装为包,包内包含发送信息的ip和端口。
open.send(setpaket);
}
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class UDPserver {
public static void main(String[] args) {
// TODO Auto-generated method stub
server order = new server();
order.setser();
}
}
2.客户端代码
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
class client {
public void user() {
try {
DatagramSocket list = new DatagramSocket();
Scanner input = new Scanner(System.in);
System.out.println("欢迎使用本次聊天,输入<goodbye>将结束聊天,祝您聊天愉快!");
while (true) {
System.out.print("请输入待发送至服务端的内容:");
String message = input.nextLine();
byte[] box = new byte[1024 * 18];
box = message.getBytes();
DatagramPacket sell = new DatagramPacket(box, 0, box.length, InetAddress.getLocalHost(), 6666);
list.send(sell);
if (message.equals("goodbye")) {
list.close();
input.close();
System.out.println("欢迎下次使用!");
break;
} else {
DatagramPacket set1 = new DatagramPacket(box, box.length);
list.receive(set1);
message = new String(box);
System.out.println("接收到服务端信息:" + message);
}
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class UDPclient {
public static void main(String[] args) {
// TODO Auto-generated method stub
client test = new client();
test.user();
}
}
本文仅供学习参考,皆为较粗浅原理,如有不对,欢迎指正。