网络编程的目的是直接或间接通过网络协议与其他计算机进行通信,因此网络编程的重点就是找到主机和找到进程。关于TCP/IP的知识这里不再赘述了,下面直接步入正题。
URL编程
从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) {
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,称为套接字。生成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()));
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);
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();
}
}
}
实验截图:
|