Java高编 、 网络(tcp与udp)
来源:互联网 发布:动态规划算法基本要素 编辑:程序博客网 时间:2024/05/16 15:37
概念
- IP地址:所有主机都会分配一个IP地址( 不重复) ipv4 4位组成0-255,网关,子掩码。
- 端口(port):为了确定主机上的应用程序。0-65535 能是用的端口1024-65535
- 域名:在万维网上注册的网站名称。通过域名解析变成IP地址
TCP和UDP
1.TCP:面向连接(需要建立连接,打电话),可靠的(不会丢失,有顺序),没有大小限制
2.UDP:面向无连接(不需要建立连接,发短信),不可靠的(可能丢失,可能无序),一个包64KB
特殊IP
127.0.0.1 : 本机
192.168.1.1: 网关
192.168.1.255: 广播地址
UDP
DatagramSocket:用来接收和发送scoket
DatagramPacket:数据报
广播-》对所有机器发送单播-》对一台机器发送组播-》对一组机器发送BindException:端口已经被占用(系统端口或者程序未关闭)
udp发包
//建立一个监听7777端口上的数据报的scoket
DatagramScoket scoket = new DatagramScoket();
//发送的信息
String msg = “发送信息”;
//发送的地址
InetSocketAddress address = new InetScoketAddress(“192.168.18.249”,7777);
//封装的数据报,必须给地址,才能发送出去
DatagramPacket datagramPacket = new DatagramPacket(msg.getByte( ), msg.getByte( ).length, address)
//怎么去发一个数据包
//已经发送出去
socket.send(datagramPacket);
udp收包
DatagramScoket socket = new DatagramScoket(7777);
//一个包的最大长度
byte[ ] buf = new byte[128];
//创建用于接收的数据报
DatagramPacket packet = new DatagramPacket( buf, buf.length);
System.out.println(“等待接收报”);
Scoket.receive(packet); //阻塞式方法
//程序走到了这一步,代表接收到信息
System.out.println(“信息收到了”);
//消除空格
String msg = new String(packet.getData(),0,packet.getLength);
工具类
1.package udp_Demo1;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class UdpUtils extends Thread {
// DatagramSocket用于在程序之间建立传送数据报的通信连接
DatagramSocket socket;
// 网络上的两个程序通过一个双向的通信连接实现数据的交换,// 这个连接的一端称为一个socket// port(计算机的)端口/** * shift+alt+z 快捷鍵while循環 * * @param port * 监听的端口 Berlin 2017.07.11 */public UdpUtils(int port) { try { socket = new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); }}// 接报 因为接收包是阻塞式方法,所以去开启新的线程去等待,否则线程就终止了@Overridepublic void run() { byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, 1024); while (true) { // 接收包工作 try { // 每次收完包,程序又会回到这里,继续监听下一个包 socket.receive(packet); System.out.println(new String(packet.getData(), 0, packet .getLength())); } catch (IOException e) { e.printStackTrace(); } }}// 发报public void send(String content, String ip, int port) { InetSocketAddress address = new InetSocketAddress(ip, port); DatagramPacket packet = new DatagramPacket(content.getBytes(), content.getBytes().length, address); try { socket.send(packet); } catch (IOException e) { e.printStackTrace(); }}
}
test1
- package udp_Demo1;
public class Test1 {
public static void main(String[] args) { UdpUtils udpUtils = new UdpUtils(7777); //线程开始工作 udpUtils.start(); for (int i = 0; i < 100; i++) { udpUtils.send("数据"+i, "127.0.01", 7777); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } }}
}
- Java高编 、 网络(tcp与udp)
- 【Java】Java网络编程TCP与UDP
- Java高编,网络tcp工具类方法
- java网络编程之UDP与TCP
- java网络编程(TCP与UDP)
- java网络通信TCP与UDP
- Java网络编程UDP与TCP协议
- 【网络】TCP与UDP
- Java网络编程(TCP/UDP)
- java-udp与tcp
- 网络基本知识TCP与UDP
- TCP与UDP网络编程
- JAVA网络编程 TCP、UDP
- java网络编程----TCP UDP
- Java网络编程,UDP TCP
- JAVA TCP/UDP网络编程
- java网络编程(TCP\UDP)
- java网络通讯(UDP与TCP)
- Android:写一个专注的编译时注解框架——ContentViewAnnotation
- 计算机组成原理与机构期末复习的概念
- 实训--day01枚举,泛型
- 使用storyboard的segue控制界面跳转
- B1001.害死人不偿命的 (3n+1) 猜想(15)
- Java高编 、 网络(tcp与udp)
- Android 一个人的武林
- 常见的路由算法及收敛路由原理
- oracle约束
- 该嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎
- Scikit中使用Grid_Search来获取模型的最佳参数
- Best Time to Buy and Sell Stock
- Storyboard 之segue用法总结
- iOS 正则表达式~详解 02 (方法名总结)