TCP和UDP两个协议在Java通信编程中是如何被使用的

UDP协议与TCP协议之间的区别不再分析,主要是分析一下这两个协议在Java通信编程中是如何被使用的。
首先介绍TCP,对于TCP,Java语言为它提供了良好的支持。建立TCP通信,首先需要构建服务器,并且得
到服务器的IP和端口号。
TCP协议下的Socket类:
java.net.Socket类代表客户端连接
java.net.ServerSocket类代表服务器端连接
Server:ServerSocket ss = new ServerSocket(5000); //创建服务器端的socket对象
              Socket socket = ss.accept(); //监听连接
Client:  Socket socket = new Socket ("xxx.xxx.xxx.xxx", 5000); //创建客户端的Socket对象,xxx.xxx.xxx.xxx代表服
              务器的IP
构建输入输出:
输入:InputStream is = socket.getInputStream(); //输入流,代表接收到的信息
            is.read(buffer);
输出:OutputStream os = socket socket.getOutputStream(); //输出流,代表发送出去的信息
            os.write("Welcome".getBytes()); //以字节传输
关闭资源:
is.close();
os.close();
socket.close();
具体实例:使用TCP/IP的套接字(Socket)进行通信

接下来介绍一下UDP
UDP建立连接的方式与TCP的方式不同,它只需要建立一个连接对象即可,不需要指定服务器的IP和端口号。
UDP协议下的Socket类:
java.net.DatagramSocket类既可以实现客户端连接,也可以实现服务器端连接。
java.net.DatagramPacket类实现对于传输的数据封装。在UDP协议下,无论是需要发送的数据还是需要接收的数
据都需要被处理成DatagramPacket类型的对象。
DatagramSocket ds = new DatagramScoket(); //建立连接, 如果发送端和接收端需要通信,那么在建立连接时需要监
听端口:DatagramSocket ds = new DatagramScoket(10010); InetAddress senderIP = revDp.getAddress(); int senderPort=rev
Dp.getPort(); //获得发送端的IP和端口号
构建输入输出
输出:
byte[] b = "Hello".getBytes();
InetAddress server = InetAddress.getByName("xxx.xxx.xxx.xxx"); //xxx.xxx.xxx.xxx为接收方的IP
DatagramPacket sendDp = new DatagramPacket(b,b.length,server,port); //port为接收方的端口号10010
ds.send(sendDp);
输入:
byte[] data = new byte[1024];
DatagramPacket revDp = new DatagramPacket(data, data.length);
ds.receive(revDp);
关闭资源:
ds.close()

TCP

客户端:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; public class MyClient { public static void main(String[] args) throws Exception{ Socket socket = null;
BufferedReader in = null;
PrintWriter out = null; BufferedReader input = null;
// 请求指定ip和端口号的服务器
socket = new Socket("127.0.0.1",3333); while(true){ in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true);
// 接收控制台的输入
input = new BufferedReader(new InputStreamReader(System.in));
// out.println("this is client info!");
String info = input.readLine(); out.println(info); String str = in.readLine(); System.out.println("客户端显示--》服务器的信息:" + str);
}
//in.close();
//out.close();
} } 服务端: import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; public class MyServices { public static void main(String[] args) throws Exception{
ServerSocket ss = null;
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
BufferedReader input = null; // 监听3333端口
ss = new ServerSocket(3333);
// 等待接收客户端的请求
socket = ss.accept();
while(true){
// 获取连接对象的输入流
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 获取客户端的输入信息
String str = in.readLine(); input = new BufferedReader(new InputStreamReader(System.in)); System.out.println("服务器显示-->客户端输入数据:" + str); out = new PrintWriter(socket.getOutputStream(),true);
// 将数据输出到客户端
// out.println("hehe");
String info = input.readLine(); out.println(info);
}
// in.close();
// out.flush();
// out.close();
} } UDP
客户端: import java.net.DatagramPacket;
import java.net.DatagramSocket; public class UDPClient { public static void main(String[] args) throws Exception { DatagramSocket ds = null;
DatagramPacket dp = null;
byte[] buf = new byte[1024]; ds = new DatagramSocket(3333);
dp = new DatagramPacket(buf, 1024); // 接收数据,放入数据报
ds.receive(dp);
// 从数据报中取出数据,这步很关键呦.
String info = new String(dp.getData(),0, dp.getLength());
System.out.println("接收到的信息是:" + info);
} } 服务端:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; public class UDPServer { public static void main(String[] args) throws Exception {
DatagramSocket ds = null;
DatagramPacket dp = null; // 构建发送对象
ds = new DatagramSocket();
// 将数据打包-->打成数据报
String info = "hello world!"; dp = new DatagramPacket(info.getBytes(), info.length(), InetAddress.getByName("localhost"),3333); // 发出数据报
ds.send(dp); } }

实例快速上手UDP和TCP的使用的更多相关文章

  1. 实例快速上手 -ASP.NET 4.5新特性WebAPI从入门到精通

    在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...

  2. 移动端IM系统的协议选型:UDP还是TCP?

    1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...

  3. socket网络编程快速上手(二)——细节问题(5)(完结篇)

    6.Connect的使用方式 前面提到,connect发生EINTR错误时,是不能重新启动的.那怎么办呢,是关闭套接字还是直接退出进程呢?如果EINTR前,三次握手已经发起,我们当然希望链路就此已经建 ...

  4. socket网络编程快速上手(一)

    工作以来,写了很多socket相关的代码.磕磕碰碰,走了很多弯路,也积累了一些东西,今天正好整理一下.为了证明不是从书上抄来的,逻辑会有点乱(借口,呵呵)!知识点的介绍也不会像书上说的那么详细和精准, ...

  5. ESFramework 4.0 快速上手(06) -- Rapid引擎(续)

    <ESFramework 4.0 快速上手>系列介绍的都是如何使用Rapid引擎(快速引擎) -- RapidServerEngine 和 RapidPassiveEngine.其实,大家 ...

  6. Requests快速上手

    发送请求 使用 Requests 发送网络请求非常简单. 一开始要导入 Requests 模块: >>> import requests 然后,尝试获取某个网页.本例子中,我们来获取 ...

  7. python的requests快速上手、高级用法和身份认证

    https://blog.csdn.net/qq_25134989/article/details/78800209 快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其 ...

  8. 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  9. 传输层-Transport Layer(下):UDP与TCP报头解析、TCP滑动窗口、TCP拥塞控制详解

    第六章 传输层-Transport Layer(下) 上一篇文章对传输层的寻址方式.功能.以及流量控制方法做了简短的介绍,这一部分将介绍传输层最重要的两个实例:TCP协议和UDP协议,看一看之前描述的 ...

随机推荐

  1. Linux串口设备树硬件、软件流控设置

    /********************************************************************** * Linux串口设备树硬件.软件流控设置 * 说明: ...

  2. matlab数组和矩阵

    数组创建 要创建每行包含四个元素的数组,请使用逗号 (,) 或空格分隔各元素. a = [1 2 3 4] a = 1×4 1 2 3 4 这种数组为行向量. 要创建包含多行的矩阵,请使用分号分隔各行 ...

  3. React两三事

    在setState中改变变量的状态应该用,this .state....而不是 this.props...

  4. Hive错误:User root is not allowed to impersonate anonymous

    修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项: <property> <name>hadoop.proxyuser.root.h ...

  5. C++学习(十八)(C语言部分)之 指针2

    指针1.指针的概述 指针是什么? 指针是一个地址 是一个常量 int 整型 int a a是变量 指针用来做什么? 方便使用数组或者字符串 像汇编语言一样处理内存地址2.指针变量 什么是指针变量? 是 ...

  6. hdu4847 Wow! Such Doge! KMP

    Chen, Adrian (November 7, 2013). “Doge Is An Ac- tually Good Internet Meme. Wow.”. Gawker. Retrieved ...

  7. hdu1907 John 博弈

    Little John is playing very funny game with his younger brother. There is one big box filled with M& ...

  8. 【HAOI2016】放旗子

    终于自己推出来一道题了quq然而时间有点久,考场上并不大丈夫……原题: 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍 ...

  9. 【java编程】Java魔法类:Unsafe应用解析

    转载来源:https://tech.meituan.com/2019/02/14/talk-about-java-magic-class-unsafe.html 前言 Unsafe是位于sun.mis ...

  10. hotel管理

    PS:这个界面