一、计算机网络java
计算机网络是指将==地理位置不一样==的具备独立功能的多台计算机及其外部设备,经过通讯线路链接起来,在网络操做系统,网络管理软件及网络通讯协议的管理和协调下,实现资源共享和信息传递的计算机系统。
二、网络编程的目的:无线电台...传播交流信息,数据交换,通讯web
三、想要达到这个效果须要什么?编程
如何实现网络的通讯?bash
通讯双方地址服务器
IP 192.168.0.0:8080网络
端口号less
规则:网络通讯的协议socket
TCP/IP参考模型:jsp
tcp
小结:
端口表示计算机上的一个程序的进程
netstat -ano#查看所用的端口 netstat -ano|findstr "5900" #管道符的做用,用来作分割,先把后边的执行完后代入前边进行执行。。。。查看指定的端口 tasklist|findstr "指定端口的进程" ctr+shift+esc 打开任务管理器
package com.lessonweb.net; import java.net.InetSocketAddress; public class TsetInetSocketAdress { public static void main(String[] args) { InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1",8080); InetSocketAddress socketAddress2 = new InetSocketAddress("localhost",8080); System.out.println(socketAddress); System.out.println(socketAddress2); System.out.println(socketAddress.getAddress()); System.out.println(socketAddress.getHostName());//地址 System.out.println(socketAddress.getPort());//端口 } }
协议:约定,就比如人与人之间的普通话
网路通讯协议:速率,传输码率,代码结构,传输控制......
问题:复杂
解决方式:大事化小:分层!
TCP/IP协议簇:其实是一组协议
出名的协议
TCP UDP对比
TCP: 打电话
须要链接,稳定
三次握手、四次挥手
最少须要三次,保证稳定链接! A:你瞅啥? B:瞅你咋地? A:干一场! A:我要走了! B:真的要走了吗? B:真的真的要走了吗? A:我真的要走了!
客户端、服务端
传输完成、释放链接、效率低
UDP:发短信
客户端
一、链接服务器,经过Socket
二、发送消息
package com.lessonweb.tcp; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class TcpClientDemo01 { public static void main(String[] args) { Socket socket= null; OutputStream os = null; try { //一、要知道服务器的地址 InetAddress serverIP = InetAddress.getByName("127.0.0.1"); //二、端口号 int port =9999; //三、建立一个socket链接 socket = new Socket(serverIP,port); //三、发送消息 os = socket.getOutputStream(); os.write("你好,网络编程".getBytes()); } catch (Exception e) { e.printStackTrace(); }finally { if (os!=null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket!=null) { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
服务端
一、创建服务的窗口,经过ServerSocket
二、等待用户的链接,经过accept
三、接收用的消息
package com.lessonweb.tcp; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class TcpServerDemo01 { public static void main(String[] args) { ServerSocket serverSocket = null; Socket socket = null; InputStream is = null; ByteArrayOutputStream baos = null; //一、我有一个地址 try { serverSocket = new ServerSocket(9999); //二、等待客户端链接过来 socket = serverSocket.accept(); //读取客户端的消息 is = socket.getInputStream(); //管道流 baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) != -1) { baos.write(buffer, 0, length); } System.out.println(baos.toString()); } catch (IOException e) { e.printStackTrace(); } finally { //关闭资源 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 (serverSocket != null) { try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
服务器端
package com.lessonweb.tcp; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class TcpServerDemo02 { public static void main(String[] args) throws Exception { //一、建立服务 ServerSocket serverSocket = new ServerSocket(9000); //二、监听客户端的链接 Socket socket = serverSocket.accept(); //三、获取输入流 InputStream is = socket.getInputStream(); //四、文件输出 FileOutputStream fos = new FileOutputStream(new File("receive")); 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()); //关闭资源 os.close(); fos.close(); is.close(); socket.close(); serverSocket.close(); } }
客户端
package com.lessonweb.tcp; import java.io.*; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class TcpClientDemo02 { public static void main(String[] args) throws Exception { Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000); //二、建立一个输出流 OutputStream os = socket.getOutputStream(); //三、读取一个文件 FileInputStream files = new FileInputStream(new File("TcpClientDemo01.java")); //四、写出文件 byte[] buffer = new byte[1024]; int len; while((len = files.read())!=1){ os.write(buffer,0,len); } //通知服务器。我已经结束了 socket.shutdownOutput();//我已经传输完了 //肯定服务器接收完毕 才可以断开链接 InputStream inputStream = socket.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer2 = new byte[1024]; int len2; while ((len2=inputStream.read())!=-1){ baos.write(buffer2,0,len2); } System.out.println(baos.toString()); //五、关闭 baos.close(); inputStream.close(); files.close(); os.close(); socket.close(); } }
一、聊天实现
发送方:
public class UdpSenderDemo01 { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(8888); //准备数据,控制台读取 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while (true){ String data = reader.readLine(); byte[] datas = data.getBytes(); DatagramPacket packet = new DatagramPacket(datas, 0, datas.length,new InetSocketAddress("localhost",6666)); socket.send(packet); if (data.equals("bye")){ break; } } socket.close(); } }
接收方:
public class UdpReceiveDemo01 { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(6666); while (true){ //准备接受包裹 byte[] container = new byte[1024]; DatagramPacket packet = new DatagramPacket(container,0,container.length); socket.receive(packet);//接收包裹 //断开链接 byte[] data = packet.getData(); String receiveData = new String(data, 0, data.length); System.out.println(receiveData); if (receiveData.equals("bye")){ break; } } socket.close(); } }
二、在线咨询:两我的均可以是发送方,也均可以是接收方!
Receive:
public class TalkReceive implements Runnable{ DatagramSocket socket =null; private int port; private String msgFrom; public TalkReceive(int port,String msgFrom) { this.port = port; this.socket = socket; this.msgFrom = msgFrom; try { socket = new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (true){ try { //准备接受包裹 byte[] container = new byte[1024]; DatagramPacket packet = new DatagramPacket(container,0,container.length); try { socket.receive(packet);//接收包裹 } catch (IOException e) { e.printStackTrace(); } //断开链接 byte[] data = packet.getData(); String receiveData = new String(data, 0, data.length); System.out.println(msgFrom+":"+receiveData); if (receiveData.equals("bye")){ break; } } catch (Exception e) { e.printStackTrace(); } } socket.close(); } }
Send:
public class TalkSend implements Runnable{ DatagramSocket socket = null; BufferedReader reader = null; private int fromPort; private String toIP; private int toPort; public TalkSend(int fromPort,String toIP,int toPort ) { this.fromPort= fromPort; this.toIP = toIP; this.toPort = toPort; try{ socket=new DatagramSocket(fromPort); reader=new BufferedReader(new InputStreamReader(System.in)); }catch(Exception e){ e.printStackTrace(); } } @Override public void run() { while (true){ try { String data = reader.readLine(); byte[] datas = data.getBytes(); DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIP, this.toPort)); socket.send(packet); if (data.equals("bye")) { break; } }catch(Exception e){ e.printStackTrace(); } } socket.close(); } }
三、简单案例的实现:师生对话交流
Student:
public class TalkStudent { public static void main(String[] args) { //开启两个线程 new Thread(new TalkSend(777,"localhost",9999)).start(); new Thread(new TalkReceive(8888,"老师")).start(); } }
Teacher:
public class TalkTeacher { public static void main(String[] args) { new Thread(new TalkSend(5555,"localhost",8888)).start(); new Thread(new TalkReceive(9999,"学生")).start(); } }
URL的组成:协议://IP地址:端口号/项目名/资源名
URLDown.java
public class URLDown { public static void main(String[] args) throws Exception { //一、下载地址 URL url = new URL("http://m701.music.126.net/20210324121008/fa40047aca19fe4a2639d56aa8b652b2/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/5546003493/cfbc/699a/fadc/6b094e5431dfc70cb57527f51db8dd4c.mp3"); //二、链接到这个服务器 HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); InputStream inputStream = urlConnection.getInputStream(); FileOutputStream fos = new FileOutputStream("错位时空.mp3"); byte[] buffer = new byte[1024]; int len; while ((len=inputStream.read(buffer))!=-1){ fos.write(buffer,0, len);//写出这个数据 } fos.close(); inputStream.close(); urlConnection.disconnect(); } }
public class URLDemo { public static void main(String[] args) throws MalformedURLException { URL url = new URL("http://localhost:8080/helloworld/index.jsp?username=kuang&passwoed=123"); 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());//参数 } }