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

本文深入探讨了UDP和TCP两种网络通信协议的区别,包括无连接的UDP如何进行数据传输,以及面向连接的TCP如何通过三次握手建立连接。文章还提供了Java代码示例,展示了如何使用这两种协议在客户端和服务器间传递信息。

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

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

 

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

三次握手:

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

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

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

如:下载电影

 

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

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

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

比如:当我们下载电影的时候,我们的电脑就是客户端,电影的数据源就是服务器,老师上课时的屏幕广播,老师的电脑就是服务器,我们用的就是客户端。

 

实现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{
        /*
         实现TCP客户端,连接到服务器
         实现TCP客户端程序的类Java.net.socket
         构造方法:Socket(String host,int port)传递服务器IP和端口号
         只要构造方法一运行,就会和服务器连接
         方法:OutputStream getOutputStream() 返回套接字输出流
         作用:将数据输出到服务器
         InputStream 服务器端读取数据
         * 
         * */
        //建立连接
        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{
        /*
         * 表示服务器程序的类:Java.net.ServerSocket
         * 构造方法L:SreverSocket(int port)传递端口号
         * 
         * */
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();
    }

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值