Java中的TCP和UDP连接

news/2024/5/17 19:18:56 标签: TCP, UDP

运输层的两个主要协议

  • UDP
      - UDP无连接的,即发送数据之前不需要建立连接,(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据的时延。
      - UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表
      - UDP面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付 IP 层
      - UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低
      - UDP 的首部开销小,只有8个字节,比 TCP 的20个字节的首部要短。
  • TCP
      - TCP面向连接的运输层协议,就是说,应用程序在使用 TCP 协议前,必须建立 TCP 连接。在传输结束后,必须释放已经建立的 TCP 连接,类似于打电话,:通话之前先拨号建立连接,通话之后要挂机释放连接。
      - 每一条 TCP 连接只能由两个端点,每一条 TCP连接只能是点对点的。
      - TCP提供可靠交付的服务。通过TCP 连接传送的数据,无差错,不丢失,不重复,并且按序到达。
      - TCP提供全双工通信TCP允许通信双方的应用进程在任何时候都能够发送数据,TCP连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据。
      - 面向字节流TCP中的流指的是流入到进程或者是从进程流出的字节序列,面向字节流的含义是:虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
    1.基于TCP协议的Scoket编程

服务端

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        //开启一个监听端口
        ServerSocket socket = new ServerSocket(8080);
        while (true){
            //等待连接
            Socket accept = socket.accept();
            System.out.println("服务器连接成功");
            //获得客户端传入的数据流
            DataInputStream dataInputStream = new DataInputStream(accept.getInputStream());
            String s = dataInputStream.readUTF();
            //读取数据
            System.out.println(s);
            if (s.equals("exit")){
                break;
            }
        }
        socket.close();
    }
}

客户端

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = null;
        while (true){
            //创建一个连接将其连接到指定的IP地址的指定端口号
            socket = new Socket("127.0.0.1", 8080);
            System.out.println("客户端连接成功");
            DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
            Scanner sc = new Scanner(System.in);
            String s = sc.nextLine();
            dataOutputStream.writeUTF(s);
            if (s.equals("exit")){
                break;
            }
        }
        socket.close();
    }
}

1.基于UDP协议的Scoket编程

发送方

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class peopleTwo {
    public static void main(String[] args) throws IOException {
        //发送方
        //指定一个端口
        DatagramSocket socket = new DatagramSocket();
        //指定一个IP
        InetAddress address = InetAddress.getByName("127.0.0.1");
        int port = 8080;
        //准备一个容器
        byte[] sendBuf;
        while (true){
            System.out.println("你要发送什么东西");
            Scanner sc = new Scanner(System.in);
            String s = sc.nextLine();
            //加入要发送的数据
            sendBuf = s.getBytes();
            //数据打包
            DatagramPacket packet = new DatagramPacket(sendBuf,  sendBuf.length,address,port);
            socket.send(packet);
            if(s.equals("exit")){
                break;
            }
        }
        socket.close();
    }
}

接收方

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

public class peopleOne {
    //UDP是无连接的
    public static void main(String[] args) throws IOException {
        //接收方
        //1开放一个端口
        DatagramSocket socket = new DatagramSocket(8080);
        //2.准备一个容器接受
        byte[] receBuf = new byte[100];
        //等待包裹容器收包
        DatagramPacket packet = new DatagramPacket(receBuf, receBuf.length);
        while (true){
            //接受包裹
            socket.receive(packet);
            //解析包裹
            String s = new String(packet.getData(), 0, packet.getLength());
            //输出文件
            System.out.println(s);
            if(s.equals("exit")){
                break;
            }
        }
        //释放资源
        socket.close();
    }
}


http://www.niftyadmin.cn/n/1462250.html

相关文章

java中线程的三种创建方式以及特点

线程的概念 首先了解进程与线程的区别与联系 在操作系统中,通常将进程看作是系统资源的分配单位和独立运行的基本单位。一个任务就是一个进程。比如,正在运行的火狐浏览器,同时还可以打开一个网易云音乐,系统就会产生两个进程。…

Java中注解(Annotation)

注解(Annotation) 注解的作用 不是程序本身,可以对程序做出解释(类似于注释)可以被其他程序读取(例如编译器) 注解的格式 注解是以"注释名"在代码中存在的 , 还可以添加一些参数值…

Java中的反射(Reflection)

1.在开始了解反射之前,首先了解一下静态语言和动态语言 动态语言 动态语言是一类运行时可以改变其结构的语言:例如新的函数,对象,甚至时代码,已有的函数可以被删除或者是其他结构上的变化,也就是说在代码…

通过JSP实现:从网页上上载一个文本文件,能显示上传成功。之后点一个按钮能在网页上显示出该文本文件的大小(字节数)

1.启动tomcat 在tomcat的bin目录下找到startup.bat&#xff0c;双击打开。 2.用Editplus编辑代码,保存在E:\tomcat\apache-tomcat-7.0.88\webapps\ROOT该目录下。 (本次任务包含两部分代码&#xff0c;分别保存为uu.jsp和upload.jsp) uu.jsp代码如下&#xff1a; <% p…

破解navicat premium12

&#xff08;之前下载的navicat已过试用期&#xff0c;为了便于以后使用&#xff0c;重新下载了navicat premium12&#xff0c;网上找到了比较方便的破解方法&#xff0c;这里分享给大家&#xff09; 来源地址&#xff1a;https://blog.csdn.net/qq_21205435/article/details/7…

JSP实现一个查询单词的网页(可依据拼写、词性、难度查出所需词汇;依据释义查出对应单词;统计单词个数)

具体要求&#xff1a; 1、用JSP编写网页。实现一个查询单词的网页&#xff0c;能依据拼写、词性、难度范围等信息查出所需词汇的释义来。建立大学四级、六级词汇表放到MYSQL数据库中&#xff0c;至少包括&#xff1a;单词、词性、释义、难度&#xff08;标记是4级的还是6级还是…

Python(x,y)下载安装及基本操作

1.下载安装包 python(x,y)下载地址 http://www.softpedia.com/get/Programming/Other-Programming-Files/Python-x-y.shtml 或者ftp://ftp.ntua.gr/pub/devel/pythonxy/ 2.安装Python&#xff08;x,y&#xff09; 下载完成后双击打开进行安装&#xff0c;根据向导点击下一步…

Numpy——快速处理数据

NumPy提供了两种基本的对象&#xff1a;ndarray&#xff08;N-dimensional array object&#xff09;和 ufunc&#xff08;universal function object&#xff09;。ndarray是存储单一数据类型的多维数组&#xff0c;而ufunc则是能够对数组进行处理的函数。 1.ndrray对象 函数…