一、简介
· 端口:IP 地址用来标识网络上的计算机,而端口号用来指明该计算机上的应用程序。
· URL(Uniform Resource Locator):统一资源定位符。它表示 Internet 上某一资源的地址。
package com.bob.network;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class UrlTest1 {
public static void main(String[] args) throws Exception {
URL url = new URL("http://www.baidu.com");
URLConnection conn = url.openConnection(); //获得URLConnection对象
InputStream is = conn.getInputStream(); //从URLConnection转向I/O
FileOutputStream fos = new FileOutputStream(new File("C:/test.txt"));
// InputStream is = url.openStream(); //这行代码等价于上面两行代码
byte[] buffer = new byte[2048];
int length;
while(-1 != (length = is.read(buffer, 0, buffer.length))){
fos.write(buffer, 0, length);
}
is.close();
fos.close();
}
}
二、TCP/IP 的套接字(Socket)
·什么是Socket:Socket是连接运行在网络上的两个程序间的双向通讯的端点。
总结: 1) 建立Socket 连接; 2)获得输入/输出流; 3)读/写数据;4)关闭输入/输出流;5)关闭Socket。
package com.bob.network;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(7777);
Socket socket = ss.accept(); //等待客户端连接成功后继续往下执行
InputStream is = socket.getInputStream();
byte[] buffer = new byte[200];
int length = is.read(buffer);
System.out.println(new String(buffer, 0, length));
OutputStream os = socket.getOutputStream();
os.write("welcome".getBytes());
is.close();
os.close();
socket.close();
}
}
package com.bob.network;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class TcpClient {
public static void main(String[] args) throws Exception{
Socket socket = new Socket("localhost", 7777);
OutputStream os = socket.getOutputStream();
os.write("hello".getBytes());
InputStream is = socket.getInputStream();
byte[] buffer = new byte[200];
int length = is.read(buffer);
System.out.println(new String(buffer, 0, length));
is.close();
os.close();
socket.close();
}
}
三、UDP(使用无线连接的数据报)
·什么是Datagram:数据报是网上传输的独立数据包,数据报是否能正确地到达目的地,到达的时间,顺序,内容的正确性均没有保障。
package com.bob.network;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
class UdpTest2 {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(7000); //监听端口7000等待接收数据包
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
System.out.println(new String(buffer, 0, packet.getLength()));
String str = "thanks";
//获得接收到之后的数据包的地址、端口
DatagramPacket packet2 = new DatagramPacket(str.getBytes(),
str.length(), packet.getAddress(), packet.getPort());
socket.send(packet2);
socket.close();
}
}
package com.bob.network;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpTest1 {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(); //创建socket用于发送接收数据报
String str = "hello world";
DatagramPacket packet = new DatagramPacket(str.getBytes(),
str.length(), InetAddress.getByName("localhost"), 7000);
socket.send(packet);
byte[] buffer = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(buffer, buffer.length);
socket.receive(packet2);
System.out.println(new String(buffer, 0, packet2.getLength()));
socket.close();
}
}