网络编程

网络编程:网络编程主要用于解决计算机与计算机(手机、平板)之间的数据传输问题。

网络编程:不需要基于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();
    }
}
聊天的客户端
原文地址:https://www.cnblogs.com/insistence/p/5886887.html