天天看点

面向网络编程:TCP协议和UDP协议

UDP协议:  无连接通信协议,当一台计算机向另一台计算机发送数据时,发送端不会确定接收端是否存在,接收端是否收到数据也不会向发送端反馈。

例:QQ留言,视频广播(UDP协议内容大小限制在64kb以内)

TCP协议:  面向连接的通信协议,必须由客户端去连接服务器端才能实现通信,服务器端一般不会主动联系客户端,并且服务器需要先启动去等待客户端连接。

三次握手:

1.客户端向服务端发出连接请求,等待服务器确定

2.服务端向客户端回送一个响应,通知其收到请求

3.客户端再次向服务端发送确认信息,确认连接。

如:下载电影

客户端与服务器的理解:都是电脑,

服务器:提供数据服务,在java中用ServerSocket表示服务器端,服务器需要事先启动,去等待客户端的连接。

客户端:在Java中用Socket类表示。

比如:当我们下载电影的时候,我们的电脑就是客户端,电影的数据源就是服务器,老师上课时的屏幕广播,老师的电脑就是服务器,我们用的就是客户端。
面向网络编程:TCP协议和UDP协议

实现UDP协议的发送端:

package UDP协议;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

public class UDPsend {

    public static void main(String[] args) throws Exception{

    byte[] data = "你好UDP".getBytes();

    InetAddress inet = InetAddress.getByName("127.0.0.1");

    DatagramPacket dp = new DatagramPacket(data, data.length,inet,6000);

    DatagramSocket ds = new DatagramSocket();

    ds.send(dp);

    ds.close();

    }

}

实现UDP协议的接收端:

package UDP协议;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

public class UDPrecieve {

    public static void main(String[] args) throws Exception{

        //创建数据包,传输对象DatagramSocket,绑定端口号

        DatagramSocket ds = new DatagramSocket(6000);

        //创建字节数组,用于接收发来的数据

        byte[] data = new byte[1024];

        //创建数据包对象,传递字节数组

        DatagramPacket dp = new DatagramPacket(data,data.length);

        //调用ds对象方法receive传递数据包

        ds.receive(dp);

        //获取发送端的IP地址对象

        String ip = dp.getAddress().getHostAddress();

        //获取发送端的端口号

        int port = dp.getPort();

        //获取发送端的字节数组个数

        int length = dp.getLength();

        System.out.println(new String(data,0,length)+"   "+ip+"   "+port);

    }

}

实现TCP协议中客户端和服务器端之间的信息传递:

TCP客户端发送信息给服务器并接收服务器发来的消息:

package TCP协议;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

public class TCPClient {

    public static void main(String[] args) throws IOException{

        //建立连接

        Socket socket = new Socket("127.0.0.1",8888);

        //写入需要传输的数据

        OutputStream out = socket.getOutputStream();

        out.write("服务器OK".getBytes());

        //接受服务器的信息

        InputStream in = socket.getInputStream();

        byte[] data = new byte[1024];

        int len = in.read(data);

        System.out.println(new String(data,0,len));

        //关闭资源

        socket.close();

    }

}

服务器端:接收客户端信息并回给客户端一个消息

package TCP协议;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class TCPserver {

    public static void main(String[] args) throws IOException{

ServerSocket server = new ServerSocket(8888);

Socket socket = server.accept();

InputStream in = socket.getInputStream();

byte[] data = new byte[1024];

int len = in.read(data);

System.out.println(new String(data,0,len));

OutputStream  out = socket.getOutputStream();

out.write("收到,谢谢".getBytes());

socket.close();

server.close();

    }

}