赞
踩
网络编程的目的是直接或间接通过网络协议与其他计算机进行通信,因此网络编程的重点就是找到主机和找到进程。关于TCP/IP的知识这里不再赘述了,下面直接步入正题。
从URL读取万维网资源
首先生成URL的时候需要进行异常处理。
public URL(String sepc)
try{
URL url=new URL("https://baidu.com");
}catch(Exception ex){
}
得到一个URL对象后可以读取指定的www资源,这时将使用URL的方法openStream()
InputStream openStream();
读取百度网站资源,注意utf-8,避免出现乱码情况。
import java.io.*; import java.net.*; public class TestWeb { public static void main(String[] args) { // 创建URL对象 try { URL url = new URL("https://www.baidu.com"); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "utf-8")); String input; while ((input = in.readLine()) != null) { System.out.println(input); } in.close(); } catch (Exception ex) { ex.printStackTrace(); } } }
两个程序通过一个双向的通信连接数据交换,这个双向链路的一端为Socket,称为套接字。生成Socket有三个参数,分别是IP地址,传输层协议,使用的端口号。
工作过程如下:
1.创建Socket
2.打开连接到Socket的输入/输出流
3.按照一定的协议对Socket进行读写操作
4.关闭Socket
再java.net.*;中提高两个类,分别是Socket以及ServerSocket。
下面以计网实验为例
题目要求:
利用Java语言提供的Socket技术,建立一个C/S模式的应用,允许客户端用户输入2个整数,服务器端接收这2个整数,并计算出它们的和、差、积、商,最后送回客户端。
下面附代码:
注意,运行的时候先运行服务器端程序,再运行客户端程序(同时打开,否则会报错)
服务器端程序:
import java.net.*; import java.io.*; public class TestServer { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(8888); System.out.println("启动服务器...."); Socket s = ss.accept(); System.out.println("客户端:" + s.getInetAddress().getLocalHost() + "已连接到服务器"); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); // 读取客户端发送来的消息 String mess = br.readLine(); System.out.println("客户端发送来2个整数:" + mess); String[] tokens = mess.split(" "); int x = Integer.parseInt(tokens[0]); int y = Integer.parseInt(tokens[1]); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); // bw.write(mess + "1234\n"); int x1 = x + y, x2 = x - y, x3 = x * y; double x4 = (double) x * 1.0 / (double) y; bw.write("两数之和:" + x1 + " 两数之差:" + x2 + " 两数之积:" + x3 + " 两数之商:" + x4 + "\n"); bw.flush(); } catch (IOException e) { e.printStackTrace(); } } }
客户端程序:
import java.net.*; import java.io.*; import java.util.Scanner; public class TestClient { public static void main(String[] args) { try { Socket s = new Socket("127.0.0.1", 8888); // 构建IO InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os)); System.out.println("请输入两个整数:"); Scanner sys = new Scanner(System.in); String str = sys.nextLine(); bw.write("" + str + "\n"); bw.flush(); // 读取服务器返回的消息 BufferedReader br = new BufferedReader(new InputStreamReader(is)); String mess = br.readLine(); System.out.println("服务器:" + mess); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
实验截图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。