网络通信要素
IP与端口号
IP
1.IP:唯一的标识Internet上的计算机(通信实体)
2.在java中使用InetAddress类代表IP
3.IP分类:IPV4 和 IPV6;万维网和局域网
4.域名:www.baidu.com www.mi.com www.sina.com www.jd.com www.vip.com
5.本地回路地址:127.0.0.1 对应着:localhost
6.实例化InetAddress:getByName(String host) / getLocalHost()
两个常用方法:getHostName() / getHostAddress()
public static void main(String[] args) {try {InetAddress inet1 = InetAddress.getByName("192.168.10.14");System.out.println(inet1);///192.168.10.14InetAddress inet2 = InetAddress.getByName("www.atguigu.com");System.out.println(inet2);//www.atguigu.com/221.15.64.230InetAddress inet3 = InetAddress.getByName("127.0.0.1");System.out.println(inet3);///127.0.0.1InetAddress inet4 = InetAddress.getLocalHost();System.out.println(inet4);//LAPTOP-IFCERJD6/10.213.26.75//getHostName()System.out.println(inet2.getHostName());//www.atguigu.com//getHostAddressSystem.out.println(inet2.getHostAddress());//221.15.64.230} catch (UnknownHostException e) {e.printStackTrace();}
端口号
正在计算机上运行的进程
1.要求:不同的进程有不同的端口号
2.范围:被规定为一个 16 位的整数 0~65535
3.端口号与IP地址的组合得出一个网络套接字:Socket
网络通信协议

TCP实例
TCP网络传输文档
//客户端@Testpublic void client() {Socket socket = null;OutputStream os = null;try {//1.创建Socket对象,指明服务器端的ip和端口号InetAddress inet = InetAddress.getByName("127.0.0.1");socket = new Socket(inet,8899);//2.获取一个输出流,用于输出数据os = socket.getOutputStream();//3.写出数据的操作os.write("你好,我是客户端".getBytes(StandardCharsets.UTF_8));} catch (IOException e) {e.printStackTrace();} finally {//4.资源的关闭if (os != null){try {os.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}//服务端@Testpublic void server() {ServerSocket ss = null;Socket socket = null;InputStream is = null;ByteArrayOutputStream baos = null;try {//1.创建服务器端的ServerSocket,指明自己的端口号ss = new ServerSocket(8899);//2.调用accept()表示接收来自客户端的socketsocket = ss.accept();//3.获取输入流is = socket.getInputStream();//不建议,可能乱码/*byte[] buffer = new byte[20];int len;while((len = is.read(buffer)) != -1){String str = new String(buffer,0,len);System.out.println(str);}*///4.读取输入流的数据baos = new ByteArrayOutputStream();byte[] buffer = new byte[5];int len;while ((len = is.read(buffer)) != -1){baos.write(buffer,0,len);}} catch (IOException e) {e.printStackTrace();} finally {//5.资源关闭if (baos != null){try {baos.close();} catch (IOException e) {e.printStackTrace();}}if (is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (ss != null){try {ss.close();} catch (IOException e) {e.printStackTrace();}}}System.out.println(baos.toString());}
TCP网络传输图片
@Testpublic void client(){Socket socket = null;OutputStream os = null;FileInputStream fis = null;try {socket = new Socket(InetAddress.getByName("127.0.0.1"),900);os = socket.getOutputStream();fis = new FileInputStream(new File("记.jpg"));byte[] buffer = new byte[1024];int len;while((len = fis.read(buffer)) != -1){os.write(buffer,0,len);}} catch (IOException e) {e.printStackTrace();} finally {if (fis != null){try {fis.close();} catch (IOException e) {e.printStackTrace();}}if (os != null){try {os.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}@Testpublic void server() {ServerSocket ss = null;Socket socket = null;InputStream is = null;FileOutputStream fos = null;try {ss = new ServerSocket(900);socket = ss.accept();is = socket.getInputStream();fos = new FileOutputStream(new File("记3.jpg"));byte[] buffer = new byte[1024];int len;while((len = is.read(buffer)) != -1){fos.write(buffer,0,len);}} catch (IOException e) {e.printStackTrace();} finally {if (fos != null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}if (is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (ss != null){try {ss.close();} catch (IOException e) {e.printStackTrace();}}}}
服务器对客户端的反馈
@Testpublic void client(){Socket socket = null;OutputStream os = null;FileInputStream fis = null;try {socket = new Socket(InetAddress.getByName("127.0.0.1"),900);os = socket.getOutputStream();fis = new FileInputStream(new File("记.jpg"));byte[] buffer = new byte[1024];int len;while((len = fis.read(buffer)) != -1){os.write(buffer,0,len);}//关闭数据的输出socket.shutdownOutput();//接收来自于客户端的数据,并显示在控制台InputStream is = socket.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer1 = new byte[20];int len1;while ((len1 = is.read(buffer1)) != -1){baos.write(buffer,0,len1);}System.out.println(baos.toString());} catch (IOException e) {e.printStackTrace();} finally {if (fis != null){try {fis.close();} catch (IOException e) {e.printStackTrace();}}if (os != null){try {os.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (os != null){try {os.close();} catch (IOException e) {e.printStackTrace();}}}}@Testpublic void server() {ServerSocket ss = null;Socket socket = null;InputStream is = null;FileOutputStream fos = null;try {ss = new ServerSocket(900);socket = ss.accept();is = socket.getInputStream();fos = new FileOutputStream(new File("记3.jpg"));byte[] buffer = new byte[1024];int len;while((len = is.read(buffer)) != -1){fos.write(buffer,0,len);}//服务器给与客户端反馈OutputStream os = socket.getOutputStream();os.write("你好,照片已经收到".getBytes());} catch (IOException e) {e.printStackTrace();} finally {if (fos != null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}if (is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (ss != null){try {ss.close();} catch (IOException e) {e.printStackTrace();}}}}
UDP实例
@Testpublic void sender() {DatagramSocket socket = null;try {socket = new DatagramSocket();String str = "我是UDP方式发送的导弹";byte[] data = str.getBytes(StandardCharsets.UTF_8);InetAddress inet = InetAddress.getLocalHost();DatagramPacket paket = new DatagramPacket(data,0,data.length,inet,9090);socket.send(paket);} catch (IOException e) {e.printStackTrace();} finally {if (socket != null){socket.close();}}}@Testpublic void receiver() {DatagramSocket socket = null;try {socket = new DatagramSocket(9090);byte[] buffer = new byte[100];DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);socket.receive(packet);System.out.println(new String(packet.getData(),0,packet.getLength()));} catch (IOException e) {e.printStackTrace();} finally {if (socket != null){socket.close();}}}
URL网络编程
1.URL:统一资源定位符,对应着互联网的某一资源地址(俗称:种子)
2.格式:
http://localhost:8080/examples/hello.txt?username=Jone
协议 主机名 端口号 资源地址 参数列表
URL的常用方法

public static void main(String[] args) {try {URL url = new URL("http://localhost:8080/example/hello.txt");System.out.println(url.getProtocol());System.out.println(url.getHost());System.out.println(url.getPort());System.out.println(url.getPath());System.out.println(url.getFile());System.out.println(url.getQuery());} catch (MalformedURLException e) {e.printStackTrace();}}
URL资源下载
public static void main(String[] args){HttpURLConnection urlConnection = null;InputStream is = null;FileOutputStream fos = null;try {URL url = new URL("http://localhost:8080/example/hello.txt");urlConnection = (HttpURLConnection) url.openConnection();urlConnection.connect();is = urlConnection.getInputStream();fos = new FileOutputStream("hello6.txt");byte[] buffer = new byte[1024];int len;while((len = is.read(buffer)) != -1){fos.write(buffer,0,len);}} catch (IOException e) {e.printStackTrace();} finally {if (is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}if (fos != null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}if (urlConnection != null){urlConnection.disconnect();}}}
