网络编程:网络编程主要用于解决计算机与计算机(手机、平板)之间的数据传输问题。
网络编程:不需要基于html页面就可以达到数据之间的传输。比如:feiQ,QQ
网页编程:就是要基于html页面的基础上进行数据的交互的,比如:珍爱网,高考的报考系统。
IP地址=网络号+主机号
分类:A类,B类,C类
InetAddress(IP类)
常用的方法:
端口号是没有类描述的
端口号的范围:0~65535
在java中网络通讯业称作为Socket(插座)通讯,要求通讯的两台机器必须安装Aocket。
不同的协议有不同的插座(Socket)
udp下的Socket:
DategramSocket(Udp插座服务)
DategramSocket(数据包类)
UDP通讯协议的特点:
1.将数据等封装为数据包,面向无连接。
2.每个数据包大小限制在64K中
3.因为无连接,所以不可靠。
4.因为不需要建立连接,所以速度快。
5.udp通讯是不分服务端与客户端的,只分发送端与接收端。
发送端的使用步骤:
1.建立udp的服务。
2.准备数据,把数据封装到数据包中。发送端的数据包要带上IP和端口号。
3.创建一个数据包
4.调用udp的服务发送数据包
5.关闭资源
接收端的使用步骤:
1.建立udp的服务。
2.准备空的数据包接收数据
3.调用udp的服务接收数据
4.关闭资源
发送端:
public class Demo1Sender { public static void main(String[] args) throws IOException { //建立udp的服务。 DatagramSocket datagramSocket = new DatagramSocket(); //准备数据,把数据封装到数据包中 String data = "这是第一个udp的例子.."; //创建一个数据包,注意len是字节长度,不是字符长度 DatagramPacket packet = new DatagramPacket(data.getBytes(), data.getBytes().length,InetAddress.getLocalHost() ,9090); //调用udp的服务发送数据包 datagramSocket.send(packet); //关闭资源,即释放占用的端口号 datagramSocket.close(); } }
接收端
public class Demo1Receive { public static void main(String[] args) throws IOException { //建立udp的服务,并且要监听一个端口 DatagramSocket socket = new DatagramSocket(9090); //准备空的数据包用于存放数据 byte[] buf = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length); // 1024 //调用udp的服务接收数据 socket.receive(datagramPacket); //数据实际上存储到了byte的字节数组中,receive是一个阻塞的方法,接收到数据前等待 System.out.println("接收端接收到的数据是"+ new String(buf,0,datagramPacket.getLength())); // getLength() 获取数据包存储了几个字节 //关闭资源 socket.close(); } }
Tcp
Tcp协议的特点:
1.tcp协议是基于IO流进行数据的传输的,面向连接。
2.tcp进行数据传输的时候是没有大小限制的。
3.tcp是面向连接的,通过三次握手的机制保证数据的完整性,可靠协议。
4.tcp是面向连接的,所以速度慢。
5.tcp是区分客户端与服务端的。
TCP协议下的Socket:
Socket(客户端),tcp客户端一旦启动,马上就要与服务端进行连接。
SeverSocket(服务端类)
Tcp的客户端的使用步骤:
1.建立tcp的客户服务端
2.获取到对应的流对象
3.写出或读取数据
4.关闭资源
public static void main(String[] args) throws IOException{ //建立tcp的服务 Socket socket = new Socket(InetAddress.getLocalHost(),9090); //获取到socket的输出流对象 OutputStream outputStream = socket.getOutputStream(); //利用输出对象把数据写出 outputStream.write("服务端你好".getBytes()); //获取到输入流对象,读取服务器端回送的数据 InputStream inputStream = socket.getInputStream(); byte[] buf = new byte[1024]; int length = inputStream.read(buf); System.out.println("客户端接收到的数据"+ new String(buf,0,length)); //关闭资源 socket.close(); }
Tcp的服务端的使用步骤:
1.建立tcp的服务端
2.接收客户端的连接,产生一个socket
3.获取对应的流对象读取或写出数据
4.关闭资源
public static void main(String[] args) throws Exception { //建立tcp的服务端 ServerSocket serverSocket = new ServerSocket(9090); //接收客户端的连接,产生一个socket Socket socket = serverSocket.accept(); //accept() 接收客户端的连接,该方法也是一个阻塞的方法,没有客户端与其连接时,会一直等待下去。 //获取输入流对象,读取客户端发送的内容 InputStream inputStream = socket.getInputStream(); byte[] buf = new byte[1024]; int length = 0; length = inputStream.read(buf); System.out.println("服务端接收"+ new String(buf,0,length)); //获取socket输出流对象,向客户端发送数据 OutputStream outputStream = socket.getOutputStream(); outputStream.write("客户端你好".getBytes()); //关闭资源 serverSocket.close(); }

package cn.itcast.tcp; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; /* 聊天的服务端 */ public class ChatServer { public static void main(String[] args) throws IOException { //建立tcp的服务端 ServerSocket serverSocket = new ServerSocket(9090); //接收客户端的连接,产生一个Socket Socket socket = serverSocket.accept(); //获取到Socket的输入流对象 BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); //获取Socket输出流对象 OutputStreamWriter socketOut = new OutputStreamWriter(socket.getOutputStream()); //获取键盘输入的内容 BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in)); //读取客户端的数据 String line = null; while((line = socketReader.readLine())!=null){ System.out.println("服务端接收到的数据"+ line); line = keyReader.readLine(); socketOut.write(line+" "); socketOut.flush(); } //关闭资源 serverSocket.close(); } }

//聊天的客户端 public class ChatClient { public static void main(String[] args) throws IOException { //建立tcp的客户端服务 Socket socket = new Socket(InetAddress.getLocalHost(),9090); //获取Socket的输出流对象 OutputStreamWriter socketOut = new OutputStreamWriter(socket.getOutputStream()); //获取Socket输入流对象 BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); //获取键盘的输入流对象,读取数据 BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in)); String line = null; //不断地读取键盘录入的数据,然后把数据写出 while((line = keyReader.readLine())!=null){ socketOut.write(line+" "); //刷新 socketOut.flush(); //读取服务端回送的数据 line = socketReader.readLine(); System.out.println("服务端回送的数据"+line); } //关闭资源 socket.close(); } }