您的位置:首页 > 理论基础 > 计算机网络

java网络编程(TCP UDP)

2018-03-07 08:55 531 查看

一 概述

1.网络编程:实现不同设备间的信息交互

2.网络通信三要素

IP地址:网络中设备的唯一表示

端口号: 一台设备中标识不同的进程 (有效端口0~65535,系统使用0~1024)

传输协议:常用TCP,UDP协议

UDP: 数据包,无连接,不可靠,效率高

TCP:有连接(三次握手),可靠,可进行大量数据传输,效率低

三次握手图解: ![这里写图片描述](https://img-blog.csdn.net

二 实例

核心对象InetAddress

package com.blueSky;

import java.net.InetAddress;

public class SocketTest {
public static void main(String[] args) throws Exception {
InetAddress address = InetAddress.getByName("lenovo-PC"); //通过静态方法获得IntAddress对象
System.out.println(address);

String hostName = address.getHostName(); //获得主机名
String hostAddress = address.getHostAddress();      //获得Ip地址
System.out.println(hostName);
System.out.println(hostAddress);

}
}


一 UDP编程

发送端

代码逻辑

1.创建发送端Socket

2.获得要发送的数据

3.打包数据

4.发送数据

5.释放资源

package com.blueSky;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPSender {
public static void main(String[] args) throws Exception {
DatagramSocket datagramSocket = new DatagramSocket(7777); //创建DatagramSocket对象(设置发送端端口为7777)
//2.获得数据
String message = "UDP编程";
//处理数据
byte[] msgBytes = message.getBytes();
int length = msgBytes.length;
InetAddress address = InetAddress.getByName("lenovo-PC");
int port = 8888;   //接收端的端口号
//3.打包对象(需要给包裹贴标签    信息 + ip + port)
DatagramPacket datagramPacket = new DatagramPacket(msgBytes, length, address, port);
//4.发送数据
datagramSocket.send(datagramPacket);
//5.释放资源
datagramSocket.close();

}
}


接收端

逻辑:

1.编写接收端Socket对象

2.从缓冲区接收数据包

3.解析包(拆包)

4.释放资源

package com.blueSky;

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

public class UDPReceiver {
public static void main(String[] args) throws Exception {
//1.创建接收端Socket对象(设置端口号为8888)
DatagramSocket datagramSocket = new DatagramSocket(8888);
//2.接收数据(调用方法从缓存区中获取数据)
//使用字节(byte)数组来接收数据

4000
byte[] msgReceive = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(msgReceive,msgReceive.length);
datagramSocket.receive(datagramPacket);  //该方法有个阻塞,接收不到数据就会被阻塞,接收到数据继续运行

//3.解析数据(拆包,方法来自dataGramPackage对象)
InetAddress address = datagramPacket.getAddress(); // 获得InetAddress对象
String hostAddress = address.getHostAddress();    //获得发送端主机名
String hostName = address.getHostName();          //获得发送端Ip地址
byte[] data = datagramPacket.getData(); //获得发送的内容
int length = datagramPacket.getLength();//获得发送数据(字节)的具体长度
System.out.println(hostAddress);
System.out.println(hostName);
//输出byte[]类型数据(转成字符串)
String dataString = new String(data,0,length,"UTF-8");
System.out.println(dataString);

//4.释放资源
datagramSocket.close();
}
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  UDP 网络编程