JavaEE之网络编程(TCP协议和UDP协议)

本文深入探讨了JavaEE中TCP和UDP的区别,包括有连接与无连接、可靠传输与不可靠传输、面向字节流与面向数据报、全双工与半双工的概念。通过实例展示了如何编写简单的TCP和UDP客户端服务器程序,以及TCP服务器的多线程和线程池版本,最后讨论了如何实现TCP英汉翻译服务。
摘要由CSDN通过智能技术生成

1.TCP和UDP的区别

1.1有连接和无连接

 

1.2可靠传输和不可靠传输

可靠传输意为发送方可以感知到接受方有没有接收到数据。

不可靠传输意为发送方不知道接收方有没有接收到数据。

1.3面向字节流和面向数据报

面向字节流:数据是以字节为单位,进行传输的。

这个就非常类似于 文件操作中的文件内容相关的操作中的字节流。
网络传输也是一样!
假设,现有100个字节的数据。
我们可以一直发完。
也可以 一次发 10个字节,发送十次。
也可以 一次发 2 个字节,发送50次。

面向数据报:
以数据报为单位,进行传输。

一个数据报都会明确大小。
一次 发送/接收 必须是 一个 完整的数据报。
不能是半个,也不能是一个半,必须是整数个。

1.4全双工和半双工

全双工:一条链路双向通信

半双工:一条链路,单向通信

2.UDP数据报

1)DatagramSocket(数据报套接字)
2)DatagramPacket(数据报 的数据包)

这两个都是关于UDP数据报的类:

3.写一个简单的客户端服务器程序

因为刚开始比较简单,因此这个程序就是我们发送什么,他就返回什么。

第一步: 

第二步:启动服务器

 

第三步:

 

回显服务器代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpEchoServer {

    //1.网络编程第一步先准备好socket实例

    private DatagramSocket socket = null;

    //port是服务器的端口号
    public UdpEchoServer(int port) throws SocketException {
        socket = new DatagramSocket(port);
    }
    //2.启动服务器
    public void start() throws IOException {
        System.out.println("启动服务器");
        //UDP是不需要建立连接的,直接接收客户端发来的数据即可
        while (true){
            //1.读取客户端发来的请求
            DatagramPacket datagramPacket = new DatagramPacket(new byte[1024],1024);
            //为了接收数据,需要事先准备好一个空的DatagramPacket对象,用receive来填充数据
            socket.receive(datagramPacket);
            //将datagramPacket解析成一个String
            String request = new String(datagramPacket.getData(),0,datagramPacket.getLength(),"UTF-8");
            //2.根据请求计算响应
             String response = process(request);
            //3.把响应写回客户端
             DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),response.getBytes().length,
                     datagramPacket.getSocketAddress());
             socket.send(responsePacket);
              //打印具体的IP地址、端口号、请求和响应
            System.out.printf("[%s:%d]resquest: %s,request: %s\n",datagramPacket.getAddress().toString()
                    ,datagramPacket.getPort(),//客户端端口号
                    request,//请求
                    response);//响应
        }

    }
    private static String process(String request){
        return request;
    }
    public static void main(String[] args) throws IOException {
        UdpEchoServer server = new UdpEchoServer(9090);
        server.start();
    }
}

 

 因为我们没有写客户端,因此没有请求,自然服务器也就没有响应

4.客户端实现

 代码展示:

package network;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

//站在客户端的角度:
//源IP:本机IP
//源端口:系统分配的端口
//目的IP:服务器IP
//目的端口:服务器的端口
//协议类型:UDP
public class UdpEc
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值