Java网络(Socket)编程小记一 UDP编程


题外话,个人理解,可能不是很全面,忘见谅!
一、基于网络编程的一些小基础
1、两个主要问题
一个是如何能准确的定位网络上一台或多台主机,另一个就是找到这台主机之后如何可靠高效的进行数据传输?

在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。

而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。

目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提 出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也 能及时得到服务。

2、两类传输协议:TCP、UDP协议。

   TCPTranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。

   UDPUser Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

两者特点

TCP:   UDP

建立连接,形成传输数据的通道将数据及源和目的的封装成数据包中,不需要建立连接

在连接中进行大数据量传输 (eg 打电话)每个数据报的大小在限制在64k内 (>64k的话多次发送)

通过三次握手完成连接,是可靠协议因无连接,是不可靠协议   //缺点

必须建立连接,势必造成效率比较低。不需要建立连接,速度快  //优点 短信的发送 聊天 网络视频会议 步话机

应用:

1,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。但是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此TCP传输的效率不如UDP

2,UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。


二、基于Socket的网络编程

    Socket是什么东东?直译就是插座的意思,当然不会这么简单。

    Socket就是为网络服务提供网络服务的一种机制。
    通讯的两端都有Socket。
    网络同心其实就是Socket键的通信。
    数据在两个Socket键通过IO传输。

别人专业的说法是:网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。

但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。

那么自然由于传输协议不同就可以建立不同的传输方式。

先来看看UDP传输

java JDK提供了两个基本的类DatagramSocket和DatagramPacket服务UDP传输。

 DatagramSocket与DatagramPacket
 (DatagramSocket)此类表示用来发送和接收数据报包的套接字。
(DatagramPacket)此类表示数据报包。用来实现无连接包投递服务。

步骤:
   1、建立发送端,接收端
   2、建立数据包
   3、调用Socket的发送接收方法
   4、关闭Socket
发送端和接收端是两个独立的运行程序。

举一例说明之:

import java.net.*;

/*
需求:通过udp传输方式,将一段文字数据发送出去。
定义udp的发送端
思路
1、建立udpsocket服务。
2、搞到数据,并将数据封装到数据包中。
3、通过socket服务的发送功能,将数据包发出去。
4、关闭资源。
*/

class UdpSend 
{
	public static void main(String[] args) throws Exception
	{
		//1、创建UDP服务,通过DatagramSocket对象
		DatagramSocket ds = new DatagramSocket();

		//2、确定数据,并将其封装成数据包
		byte[] buf = "udp ge men lia le".getBytes();
		DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.117"),10000);

		//3、通过socket服务,将已有的数据包发送出去,通过send方法
		ds.send(dp);
		//4、关闭资源
	}
}
/*
需求:
定义一个应用程序,用于接收udp协议传输的数据并处理。

定义udp的接收端。
思路:
1、定义udpsocket服务。通常会监听一个端口,其实就是给这个接受网络应用程序定义一个数字标识。
	方便与明确哪些数据过来该应用程序可以处理。
2、定义一个数据包,因为要存储接收到的字节数据,因为数据包对象中有更多功能可以可以提取字节数据中的不同数据信息。
3、通过socket服务的receive方法将受到的数据存入已定义好的数据包中。
4、通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上。
5、关闭资源

*/
class UdpRece
{
	public static void main(String[] args) throws Exception
	{
		//1、创建udp socket,建立端点
		DatagramSocket ds = new DatagramSocket(10000);
		while(true)
		{
			//2、定义数据包,用于存储数据。
			byte[] buf = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buf,buf.length);

			//3、通过服务的receive方法将受到数据存入数据包中。
			ds.receive(dp);//是一个阻塞式方法

			//4、通过数据包的方法获取其中的数据。
			String ip = dp.getAddress().getHostAddress();
			String data = new String(dp.getData(),0,dp.getLength());
			int port = dp.getPort();
			System.out.println(ip + "::" + data + "::" + port);
		}
		//5、关闭资源
		//ds.close();
	}
}

UDP传输,大概就是这样的了,其实java Socket编程中主要指的是TCP传输,12点了,明天接着写吧,加油!








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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值