java网络编程
1.概述
- 计算机网络
- 网络编程目的
- 需要什么
- IP定位网络上一台主机
- 如何传输数据
2.网络通信要素
通信双方地址:
- IP
- 端口号
网络通信协议
3.IP
//InetAddress
import java.net.InetAddress;
import java.net.UnknownHostException;
public class TestInetAddress {
public static void main(String[] args) {
try {
//InetAddress.getByName("localhost");
// .getLocalHost();
InetAddress address = InetAddress.getByName("127.0.0.1");
System.out.println(address);
InetAddress address1 = InetAddress.getByName("www.baidu.com");
System.out.println(address1);
//常用方法
System.out.println(address1.getCanonicalHostName()); //规范名字
System.out.println(address1.getHostAddress()); // ip
System.out.println(address1.getHostName()); // 域名,或自己电脑名字
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
4.端口
-
不同进程不同端口号
-
0~65535
-
端口分类
-
公有端口0~1023
- HTTP:80
- HTTPS:443
- FTP:21
- Telent:23
-
程序注册端口 1024~49151
- Tomcat:8080
- MySQL:3306
- Oracle:1521
-
动态、私有 49152~65535
netstat -ano #查看所有端口 netstat -ano|findstr "5900" #查看指定端口 tasklist|findstr "8696" #查看指定端口进程
-
5.通信协议
6.TCP
-
Client
import java.io.*; import java.net.Socket; public class TcpClient { public static void main(String[] args) throws IOException { //1.创建一个Socket连接 Socket socket = new Socket("127.0.0.1",9000); //2.创建一个输出流 OutputStream outputStream = socket.getOutputStream(); //3.读取本地文件 FileInputStream fin = new FileInputStream("C:\\Users\\Administrator\\Desktop\\LongWayOfJava\\download\\hello.txt"); //4.输出到客户端 byte[] buffer = new byte[1024]; int len = 0; while((len=fin.read(buffer))!=-1){ outputStream.write(buffer,0,len); } //通知服务器,传输结束 socket.shutdownOutput(); //确定服务器接收完毕 InputStream inputStream = socket.getInputStream(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer2 = new byte[1024]; int len2 = 0; while((len2=inputStream.read(buffer2))!=-1){ byteArrayOutputStream.write(buffer2,0,len2); } System.out.println(byteArrayOutputStream.toString()); //关闭资源 byteArrayOutputStream.close(); inputStream.close(); fin.close(); outputStream.close(); socket.close(); } }
-
Server
import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; public class TcpServer { public static void main(String[] args) throws IOException { //1.创建服务 ServerSocket serverSocket = new ServerSocket(9000); //2.监听客户端的连接 Socket socket = serverSocket.accept(); //3.获取输入流 InputStream inputStream = socket.getInputStream(); //4.读取客户端输入,并输出保存到本地 FileOutputStream fout = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\LongWayOfJava\\download\\server01.txt"); byte[] buffer = new byte[1024]; int len = 0; while((len = inputStream.read(buffer))!=-1){ fout.write(buffer,0,len); } //通知客户端接收完毕 OutputStream out = socket.getOutputStream(); out.write("over".getBytes(StandardCharsets.UTF_8)); //关闭资源 fout.close(); inputStream.close(); out.close(); serverSocket.close(); } }
7.UDP
-
Client
import java.io.IOException; import java.net.*; import java.nio.charset.StandardCharsets; public class UdpClient { public static void main(String[] args) throws IOException { //1.建立一个socket DatagramSocket datagramSocket = new DatagramSocket(); //2.生成一个数据包 InetAddress address = InetAddress.getByName("localhost");//接收方地址 String msg = "hello"; int port = 9000; DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,address,port); //3.发送包 datagramSocket.send(datagramPacket); //4.关闭流 datagramSocket.close(); } }
-
Server
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UdpServer { public static void main(String[] args) throws IOException { //开放端口 DatagramSocket datagramSocket = new DatagramSocket(9000); //接收数据包 byte[] buffer = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(buffer,0,buffer.length); datagramSocket.receive(datagramPacket); // 阻塞接收 System.out.println(datagramPacket.getAddress().getHostAddress()); System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength())); //关闭连接 datagramSocket.close(); } }
8.URL
URL:统一资源定位符
协议://IP:PORT/项目名/资源
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class URLDemo {
public static void main(String[] args) throws IOException {
URL url = new URL("http://www.baidu.com");
System.out.println(url.getProtocol()); //协议
System.out.println(url.getHost()); //主机IP
System.out.println(url.getPort()); //端口
System.out.println(url.getPath()); //全路径
System.out.println(url.getFile()); //文件
System.out.println(url.getQuery()); //参数
//下载文件
//1.下载地址
String path = "";
URL url2 = new URL(path);
//2.连接到该资源
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
FileOutputStream fout = new FileOutputStream("file.txt");
byte[] buffer = new byte[1024];
int len;
while((len=inputStream.read(buffer))!=-1){
fout.write(buffer,0,len);
}
fout.close();
inputStream.close();
urlConnection.disconnect();
}
}