1.1、概论
地球村,你在西安,你一个美国的朋友!
信件:
计算机网络:
计算机网络系统就是利用通信设备和线路将地理位置不同、功能独立的多个计算机系统互联起来,以功能完善的网络软件实现网络中资源共享和信息传递的系统。
网络编程的目的:
无线电台...传播交流信息,数据交换,通信
想要达到的效果需要什么:
-
如何准确定位网络上的一台主机 192.168.16.124:端口,定位上这个计算机上的某个资源
-
找到了这个主机,如何传输数据呢?
javaweb:网页编程 B/S
网络编程:TCP/IP C/S
1.2、网络通信的协议
如何实现网络的通信?
通信双方地址:
-
IP
-
端口号
-
192.168.16.124:5900
规则:网络通信的协议
http,ftp,smtp,
TCP/IP参考模型
小结:
-
网络编程中有两个主要的问题
-
如何准确的定位到网路上的一台或多台主机
-
找到主机后如何进行通信
-
-
网络编程中的要素
-
IP和端口号 IP
-
网络通信协议 UDP,TCP
-
-
万物皆对象
1.3、IP
IP地址:IntAddress
-
唯一定位一台网络上计算机
-
127.0.0.1 : 本机 localhost
-
ip地址的分类:
-
IPv4/v6
-
127.0.0.1 ,4
-
-
IP地址的分类
-
公网-私网
-
1.6、TCP
Tomcat
服务端
-
自定义 S
-
Tomcat服务器 S : Java后台开发!
客户端
-
自定义 C
-
浏览器 B
/*package com.cao.lesson02; import java.io.File; import java.io.FileInputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class TcpClientDemo02 { public static void main(String[] args) throws Exception { //1.创建一个Socket连接 Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000); //2、创建一个输出流 OutputStream os = socket.getOutputStream(); //3、读取文件 //FileInputStream fis = new FileInputStream(new File("C:\\Users\\14806\\Pictures\\Saved Pictures")); //4、写出文件 byte[] buffer = new byte[1024]; int len; while((len=fis.read(buffer))!=1){} os.write(buffer,0,len); } //5.关闭资源 //fis.close(); os.close(); socket.close(); } */
1.7、UDP
发短信:不用连接,需要知道对方的地址!
发送消息
package com.cao.lesson03; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; //不需要连接服务器 public class UdpClientDemo01 { public static void main(String[] args) throws Exception { //1、建立一个Socket DatagramSocket socket = new DatagramSocket(8080); //2、建个包 String msg = "你好啊,服务器!"; //发送给谁 InetAddress localhost = InetAddress.getByName("localhost"); int port = 9090; //数据,数据的长度起始,要发送给谁 DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length); //3、发送包 socket.send(packet); //4、关闭流 socket.close(); } }
接收端
package com.cao.lesson03; import com.sun.org.apache.xpath.internal.operations.String; import java.net.DatagramPacket; import java.net.DatagramSocket; //import java.net.SocketException; //还是要等待客户端的链接! public class UdpServerDemo01 { public static void main(String[] args) throws Exception { //开放端口 DatagramSocket socket = new DatagramSocket(9090); //接收数据包 byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);//接收 socket.receive(packet); //阻塞接收 System.out.println(packet.getAddress().getHostAddress()); System.out.println(new java.lang.String(packet.getData(),0,packet.getLength())); //关闭连接 socket.close(); } }
循环发送消息
package com.cao.chat; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class UdpSenderDemo01 { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(8888); //准备数据: 控制台读取 System.in 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(); } }
循环接收消息
package com.cao.chat; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; 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); //阻塞式接受包裹 //断开连接 bye byte[] data = packet.getData(); String receiveData = new String(data, 0, data.length); System.out.println(receiveData); if (receiveData.equals("bye")){ break; } } socket.close(); } }
在线咨询:两个人都可以是发送方,也都可以是接收方!