首先网络传输数据需了解例如以下三点

1、找到对方IP

2、数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序用数字进行了标识。为了方便称呼这个数字,叫做port,逻辑port

3、  定义通信规则。这个通信规则称为协议。

国际组织定义了通用协议TCP/IP。

127.0.0.1本机回环地址 不易记忆,可用主机名 主机名:localhost

0-65535port范围 0-1024系统使用或保留port 。当中mysql的port号为 3306

一、UDP

UDP相对于TCP来说是不可信任的



TCP在建立连接之前有3次握手,连接建立之后还有数据重传机制来保证数据的稳定传输



而UDP并没有握手机制和重传机制。



简单点说就是UDP通信时仅仅管发,而无论对方收不收的到。

而TCP在每次通信完毕后都要有一个包来确认是否收到。校验是否完善,否则就会重传。

UDP

将数据及源和目的封装成数据包中,不须要建立连接。每一个数据报的限制大小在64内,因无连接。是不可靠协议。

不须要建立连接,速度快。

TCP

建立连接,形成数据传输的通道,在连接中进行大数据量传输,通过三次握手完毕连接。是可靠协议。必须建立连接。效率会稍低。

三次握手,(张三你在吗?)(我在。)(好,我知道你在了。

以下是採用UDP发送方式的样例

(一)UDP发送端

需求:通过UDP传输方式,将一段文字数据发送出去。

思路:

1、  建立udpsocket服务

2、  提供数据,并将数据封装到数据包中

3、  通过socket服务的发送功能。将数据包发送出去。

4、  关闭资源。

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException; public class Work {
public static void main(String[] args) throws IOException {
//创建UDp服务,通过DatagramSocket对象,随机选择数据端口进行发送
DatagramSocket ds=new DatagramSocket();
//确定数据。并封装成数据包
byte[] buf="dadfdadsfsafasdf".getBytes();
DatagramPacket dp=
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.100"),1000);
//通过socket服务。将已有的数据包发送出去,通过send方法
ds.send(dp);
//关闭资源
ds.close(); }
}

(二)UDP接收端

定义udp的接收端

需求:

定义一个应用程序。用于接收UDP协议传输的数据并处理。

1、  定义udpSocket服务,一般会监听一个port。

事实上就是给这个接收网络应用程序定义数字标识。方便于明白哪些数据过来应用程序能够处理。

2、  定义一个数据包。由于要存储接收到的字节数据。

由于数据包对象中有很多其它功能能够提前字节数据中的不同数据信息。

3、  通过socket服务的receive方法将收到的数据存入已定义好的数据包中

4、  通过数据包对象的特有功能。将这些不同的数据取出,打印在控制台上。

5、关闭资源

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket; public class ReData {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket(10000);
byte[] arr = new byte[1024];
DatagramPacket dp = new DatagramPacket(arr, arr.length);
ds.receive(dp);/
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
int port = dp.getPort();
System.out.println(ip + ":" + data + ":" + port);
ds.close();
}
} DatagramSocket ds = new DatagramSocket(10000);
在while(true)循环运行该语句,就会出现端口已使用异常。

最新文章

  1. Java中接口的实现问题
  2. fedora23的打印服务
  3. sql学习
  4. 第二次冲刺-Runner站立会议01
  5. 扫描二维码跳转app
  6. 一张图读懂Java多线程
  7. CI 笔记 数据库
  8. 化简复杂逻辑,编写紧凑的if条件语句
  9. STM32之FreeRTOS
  10. 浅谈C++中的友元关系
  11. java线程同步小结
  12. Vue(二十六)父子组件通信
  13. 五、latex文档的篇章结构
  14. 关于mac的一些常用操作记录
  15. 在Docker环境下部署Kafka
  16. Idea for Mac 过期 IntelliJ IDEA 2017 完美注册方法(附idea for Mac破解方法)
  17. POJ.3145.Common Substrings(后缀数组 倍增 单调栈)
  18. js 对象的_proto_属性 和函数的prototype属性分析
  19. grabcut 分割 Rect
  20. webpack 打包问题2

热门文章

  1. 为data盘加入磁盘(asm external)
  2. hmm CDN检测
  3. HIT Software Construction Lab 2
  4. JavaScript系列--浅析原型链与继承
  5. CSS实现栅格布局
  6. gdal集成kml库的做法
  7. golang vue nginx
  8. Stack Overflow大揭密:哪一种程序员工资最高?
  9. RabbitMQ学习笔记(2)----RabbitMQ简单队列(Hello World)的使用
  10. 3Ds Max实例教程-制作女战士全过程