`
schy_hqh
  • 浏览: 551248 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

(网络编程)Socket编程之UDP

 
阅读更多

UDP 高效,但不保证数据一定被接收成功

 

/*
通过UDP传输方式,将一段文字发送出去
思路:
1,建立udpsocket服务
2,提供数据,将数据封装到数据包中
3,通过socekt服务的发送功能将数据包发送出去
4,关闭资源
*/
import java.net.*;
import java.io.*;

//定义一个udp发送端
class UdpSendData 
{
	public static void main(String[] args) throws IOException
	{
		//1,创建dup服务,通过DatagramSocekt对象
		DatagramSocket ds = new DatagramSocket(8888);//发送端可以使用默认端口

		//2,确定数据,并封装成数据包
		byte[] data = "udp data send".getBytes();
		DatagramPacket dp = 
			new DatagramPacket(data,data.length,InetAddress.getByName("127.0.0.1"),9999);//必须指定接收端端口
		//3,通过socket服务,将已有的数据包发送出去,通过send发送
		ds.send(dp);
		//4,关闭资源
		ds.close();
	}
}

/*
需求:
定义一个应用程序,用于接收udp协议传输的数据并处理

思路:
1,定义udpsocket服务。
   设置一个监听端口,给接收网络应用程序定义数字标识
   明确哪些数据该此应用程序处理
2,定义一个数据包,存储接收到的字节数据
   (用数据包对象中的功能提取字节数据中的不同数据信息)
3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中
4,通过数据包对象的特有功能,将不同的数据取出,打印到控制台上
5,关闭资源
*/


//定义一个udp接收端
class UdpReceiveData
{
	public static void main(String[] args)throws IOException
	{
		//1,创建udp服务,建立端点
		DatagramSocket ds = new DatagramSocket(9999);
		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传输
发送端通过键盘录入数据,发送数据到接收端

局域网广播地址---应用:群聊

//192.168.1.0 代表一个网络段
//192.168.1.255 代表这个网段的广播地址 
	使用255这个地址,网段内的所有存活的主机都能收到

*/
import java.net.*;
import java.io.*;


//DUP发送端
class  UdpSendData2
{
	public static void main(String[] args) throws IOException
	{
		DatagramSocket ds = new DatagramSocket();
		BufferedReader bufr = 
						new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		while((line=bufr.readLine())!=null)
		{
			if(line.equals("886"))
				break;
			byte[] buf = line.getBytes();
			DatagramPacket dp = 
				new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),6666);
				//new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),6666);
				//设置为广播地址,向网段内所有主机发广播
			ds.send(dp);
		}
		ds.close();
	}
}

//DUP接收端
class  UdpReceiveData2
{
	public static void main(String[] args) throws IOException
	{
		DatagramSocket ds = new DatagramSocket(6666);
		while(true)
		{
			byte[] buf = new byte[1024];//最大64K,UDP一次最多能发的数据量
			DatagramPacket dp = 
				new DatagramPacket(buf,buf.length);
			ds.receive(dp);
			String ip = dp.getAddress().getHostAddress();
			String message = new String(dp.getData(),0,dp.getLength());
			int port = dp.getPort();
			System.out.println("ip:"+ip+"\tport:"+port);
			System.out.println("message:"+message);
		}
	}
}

 

/*
编写一个聊天程序
有收数据和发数据的部分
这两部分需要同时执行---多线程
一个线程负责发送,一个线程负责接收
在一个DOS窗口中完成聊天
既能发数据,又能接收数据!

多线程
IO
UDP
Socket
*/

import java.net.*;
import java.io.*;

class Send implements Runnable
{
	private DatagramSocket ds;
	public Send(DatagramSocket ds)
	{
		this.ds = ds;
	}
	public void run()
	{
		try
		{
			BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
			String line = null;
			while((line=bufr.readLine())!=null)
			{
				if(line.equals("886"))
					break;
				byte[] buf = line.getBytes();
				DatagramPacket dp =
					new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),6688);
				ds.send(dp);
			}
		}
		catch (Exception e)
		{
			throw new RuntimeException("发送失败!");
		}
		finally
		{
			ds.close();
		}
	}
}

class Receive implements Runnable
{
	private DatagramSocket ds;
	public Receive(DatagramSocket ds)
	{
		this.ds = ds;
	}
	public void run()
	{
		try
		{
			while(true)
			{
				byte[] buf = new byte[1024];
				DatagramPacket dp = new DatagramPacket(buf,buf.length);
				ds.receive(dp);
				String ip = dp.getAddress().getHostAddress();
				int port = dp.getPort();
				String message = new String(dp.getData(),0,dp.getLength());
				System.out.println("ip:"+ip+"\tport:"+port);
				System.out.println("message:"+message);			
			}
		}
		catch (Exception e)
		{
			throw new RuntimeException("接收失败!");
		}
		finally
		{
			ds.close();
		}
	}
}

class ChatDemo
{
	public static void main(String[] args) throws Exception
	{
		DatagramSocket sendSocket = new DatagramSocket();
		DatagramSocket receiveSocket = new DatagramSocket(6688);

		new Thread(new Send(sendSocket)).start();
		new Thread(new Receive(receiveSocket)).start();

	}
}

 

分享到:
评论

相关推荐

    socket网络(UDP协议编程)

    "socket网络(UDP协议编程)"这个标题明确指出了我们要讨论的核心内容——使用套接字(socket)进行网络编程,并且聚焦在用户数据报协议(UDP)上。UDP是一种无连接的、不可靠的传输层协议,与TCP(传输控制协议)...

    TCP/IP和UDP的socket网络编程源码和文档

    本资源包提供的是基于TCP/IP和UDP的socket网络编程源码及文档,适用于实验平台mini2440开发板和Ubuntu操作系统。 TCP/IP协议栈是一个分层的通信模型,包含四层:链路层、网络层、传输层和应用层。TCP(Transmission...

    网络编程之基于UDP的Socket编程

    基于UDP的Socket编程 网络编程中的Socket编程是指在应用程序中使用操作系统提供的网络编程接口来实现网络通信的过程。在 Socket 编程中,存在两种主要的协议:TCP 和 UDP。其中,TCP 协议是一种面向连接的可靠通信...

    java udp socket 网络编程

    Java UDP套接字网络编程是Java编程领域中的一个重要部分,主要涉及如何利用Java的Socket类库来实现基于用户数据报协议(User Datagram Protocol)的通信。UDP是一种无连接的、不可靠的传输协议,适用于对实时性要求...

    udp使用socket聊天编程

    2. Socket编程基础:创建Socket、绑定、接收、发送数据。 3. 多线程技术:同时处理接收和发送任务,保证程序的并发性。 4. 网络通信流程:服务器端的监听和响应,客户端的主动连接和发送。 5. 错误处理和异常处理:...

    TCP,UDP,Socket,Http网络编程面试题 47道.pdf

    本文档总结了网络编程面试题的关键知识点,涵盖了 TCP、UDP、Socket、Http 等网络协议的基础知识、网络编程的基本概念、网络协议的分层结构等内容。通过阅读本文档,读者可以了解网络编程的基本原理、网络协议的作用...

    Linux网络编程 Socket UDP形式(包括服务器端和接收端)

    【Linux网络编程:Socket UDP详解】 在Linux系统中,网络编程是通过Socket接口来实现的。Socket提供了进程间通信的能力,使得分布在不同机器上的应用程序能够相互通信。本篇文章将详细解析一个简单的UDP(User ...

    socket网络编程 UDP协议实现

    在进行UDP网络编程时,我们需要使用到socket接口,它是操作系统提供的网络通信API,允许应用程序发送和接收数据。 首先,让我们了解一下UDP套接字的基本概念。在UDP中,套接字是对网络通信端点的抽象,它由一个IP...

    C语言socket网络UDP编程例子源代码DevC++工程

    此外,标签中提到了"C++",虽然这个示例是基于C语言的,但C++与C语言兼容,因此你也可以使用C++进行socket编程,只是可以利用C++的面向对象特性来进一步封装和抽象网络通信过程。 总的来说,学习C语言的socket网络...

    Python 网络编程 python网络编程 socket

    Python 网络编程_python网络编程_socket Python 网络编程是指使用 Python 语言进行网络通信编程,包括 socket 编程、网络通信协议等方面的内容。下面是对 Python 网络编程的详细介绍: 1. 网络通信的概念 网络...

    基于udp的socket编程实例

    在IT领域,网络编程是不可或缺的一部分,而基于UDP(User Datagram Protocol)的Socket编程是其中一种常见的技术。UDP是一种无连接、不可靠的传输协议,适用于实时数据传输或对速度有较高要求的应用场景。本实例将...

    C#网络编程(socket,tcp,udp)

    C#网络编程是开发应用程序与远程系统交互的关键技术,它主要涉及了Socket、TCP和UDP等网络通信协议。本文将详细解析这些概念及其在C#中的应用。 首先,Socket是网络编程的基础,它是一个用于在网络中传输数据的端点...

    Socket网络编程(TCP和UDP)

    Socket网络编程是计算机网络中的一种通信机制,它允许应用程序通过网络...在VS2013中使用MFC库,可以简化Socket编程过程,使得网络通信更加便捷。通过分析和实践socket_demo中的代码,你将对TCP和UDP有更深入的理解。

    udp编程Socket

    **基于UDP的Socket编程主要包括以下几个步骤:** 1. **创建Socket**:使用`socket()`函数创建一个UDP套接字,指定协议族(常为AF_INET,表示IPv4)和套接字类型(SOCK_DGRAM,表示UDP)。 2. **设置地址信息**:...

    udp.rar_SOCKET套接编程_UDP socket_c udp_c socket UDP_udp 聊天

    标题中的"udp.rar"指的是一个关于UDP协议的压缩文件,主要涵盖了使用C语言进行UDP Socket编程的内容。...通过这个实践项目,初学者能够掌握UDP Socket编程的基础,并为深入学习网络编程打下坚实的基础。

    基于UDP和TCP协议的Socket(网络编程/套接字)案例

    以上是对基于UDP和TCP协议的Java Socket编程的基本介绍。实际应用中,还需要考虑异常处理、多线程、数据编码解码等问题,以确保程序的健壮性和可维护性。通过深入理解并实践这些示例,开发者可以更好地掌握网络编程...

    UDP SOCKET 网络编程

    UDP协议的的网络程序。包含服务器(接收端)和客户端的(发送端)的源程序。C++语言编写。VC++6.0中测试通过

    iOS网络编程SocketDemo

    在iOS开发中,网络编程是不可或缺的一部分,而Socket编程则是实现网络通信的基础。Socket是一种低级别的、原始的网络通信机制,允许应用程序通过网络发送和接收数据。本示例"iOS网络编程SocketDemo"旨在帮助开发者...

    网络编程Socket(基于TCP/UDP)的Demo

    在这个"网络编程Socket(基于TCP/UDP)的Demo"中,我们将重点讨论使用Socket接口进行TCP和UDP通信的基本概念和实现方法,特别是在Microsoft Visual Studio 2013(VS2013)环境下。 首先,Socket是网络通信的接口,...

    基于UDP协议的Socket网络编程模式的实现

    一个典型的UDP Socket编程流程包括: 1. **创建Socket**:在服务端和客户端分别创建UDP Socket。 2. **绑定地址**:服务端需要将Socket绑定到一个特定的IP地址和端口上。 3. **发送数据**:客户端向服务端发送数据...

Global site tag (gtag.js) - Google Analytics