java网络编程之UDP与TCP

说到网络编程,我们可以简单的将其理解为数据的传输,只不过这个数据的传输不是本机内的数据传输,而是与互联网中的某台机器进行数据的传输。数据的传输是通过流来完成的,而且,为了使数据能够顺利的完成传输过程,所以数据在传输时也要遵守相关的协议。

IP:

就和我们去邮局寄快递一样,我们要写上快递要去的地址。ip(如10.12.82.66) 就如同这地址一般,可以让你发送的数据正确的送往对应ip的主机上,所以当我们要访问互联网上某台主机的时候,可以通过ip找到主机并获取想要的内容。我们可以直接在浏览器上输入119.75.218.70,就可以访问到百度。但是往往我们很难记住这么复杂的ip地址,于是就给ip取了一个“名字”,域名是一个IP地址上的“面具” ,当我们输入www.baidu.com时,浏览器首先会查下了一下本机的hosts文件有没有对应用的地址,没有则去DNS服务器找到对应的ip地址,最后才会根据这个地址访问相关的内容。

java将ip地址也封装成了一个对象,InetAddress。下面了解一下InetAddress的基本用法。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressTest {

	public static void main(String[] args) {
		inetAddressTest();
	}

	private static void inetAddressTest() {
		try {
			// 获取本地主机的的InetAddress对象
			// InetAddress inet = InetAddress.getLocalHost();
			// 获取互联网中主机的InetAddress对象
			InetAddress inet = InetAddress.getByName("www.baidu.com");
			// InetAddress inet = InetAddress.getByName("119.75.217.109");

			// 输出ip信息。
			System.out.println(inet);
			System.out.println(inet.getHostName());
			System.out.println(inet.getHostAddress());
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
	}
}

UDP:面向无连接,每次数据包的大小限制在64K之内,是不可靠的连接,但是速度快。 比如:聊天,视频会议,桌面共享等。
UDP不管对方在不在,直接将数据传送过去。
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 UDPTest {
	/**
	 * @param args
	 *            将数据通过UDP的方式发送出去。
	 */
	public static void main(String[] args) {
		DatagramSocket ds = null;
		try {
			// 创建socket,udp服务
			ds = new DatagramSocket();
			// 将要传输的数据封闭成数据包
			byte[] buf = "hello java socket".getBytes();
			DatagramPacket dp = new DatagramPacket(buf, buf.length,
					InetAddress.getByName("10.12.82.66"), 10000);
			// 发送数据。
			ds.send(dp);
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ds != null)
				ds.close();
		}
	}
}

TCP:面向连接,形成传输数据的通道,可进行大数据传输。三次握手完成连接,是可靠协议,效率会稍低。
TCP是面向连接的,下面是一个简单的TCP服务端,运行后,通过浏览器访问:http://localhost:10000/就可以接收其发送过来的数据。
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Test1 {

	public static void main(String[] args) {
		try {
			//创建服务端,端口号为10000
			ServerSocket ss = new ServerSocket(10000);
			//获取连接的客户对象。
			Socket s = ss.accept();
			//向客户端写入数据
			PrintWriter out = new PrintWriter(s.getOutputStream(),true);
			String ip = s.getInetAddress().getHostAddress();
			out.println("您好:"+ip);
			
			s.close();
			ss.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值