UDP socket编程

原创 2013年12月04日 09:50:19

服务器端

public class UDPServer {

	public static void main(String[]args) throws Exception{
		
		byte[] buf = new byte[100];
		//用来接收数据
		DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);
		
		DatagramSocket datagramSocket = new DatagramSocket(9995);
		
		while(true){
//receive()方法是阻塞方法,如果没有收到信息会一直等待
//将接收的信息存放到datagramPacket当中
			datagramSocket.receive(datagramPacket);
			System.out.println("data  is :" + new String(datagramPacket.getData()));
		}
	}
}

 

客户端

public class UDPClient {

	public static void main(String[] args) throws Exception {
		byte[] buf = new String("UDP TEST data from client").getBytes(); ;
		DatagramPacket datagramPacket = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),9995);
		DatagramSocket datagramSocket = new DatagramSocket();
//将datagramPacket数据传输到目标地址
		datagramSocket.send(datagramPacket);
	}
}

 

 

例子二(从疯狂JAVA中copy的)

package hb.udp;

import java.awt.*;
import java.net.*;
import java.io.*;
import java.util.*;

public class UdpServer {
	public static final int PORT = 30000;
	// 定义每个数据报的最大大小为4K
	private static final int DATA_LEN = 4096;
	// 定义该服务器使用的DatagramSocket
	private DatagramSocket socket = null;
	// 定义接收网络数据的字节数组
	byte[] inBuff = new byte[DATA_LEN];
	// 以指定字节数组创建准备接受数据的DatagramPacket对象
	private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);
	// 定义一个用于发送的DatagramPacket对象
	private DatagramPacket outPacket;
	// 定义一个字符串数组,服务器发送该数组的的元素
	String[] books = new String[] { "轻量级J2EE企业应用实战", "基于J2EE的Ajax宝典", "Struts2权威指南", "ROR敏捷开发最佳实践" };

	public void init() throws IOException {
		try {
			// 创建DatagramSocket对象
			socket = new DatagramSocket(PORT);
			// 采用循环接受数据
			for (int i = 0; i < 1000; i++) {
				// 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。阻塞等待
				socket.receive(inPacket);
				// 判断inPacket.getData()和inBuff是否是同一个数组
				System.out.println(inBuff == inPacket.getData());
				// 将接收到的内容转成字符串后输出
				System.out.println(new String(inBuff, 1, inPacket.getLength()));
				// 从字符串数组中取出一个元素作为发送的数据
				byte[] sendData = books[i % 4].getBytes();
				// 以指定字节数组作为发送数据、以刚接受到的DatagramPacket的
				// 源SocketAddress作为目标SocketAddress创建DatagramPacket。
				outPacket = new DatagramPacket(sendData, sendData.length, inPacket.getSocketAddress());
				// 发送数据
				socket.send(outPacket);
			}
		}
		// 使用finally块保证关闭资源
		finally {
			if (socket != null) {
				System.out.println("udpserver close");
				socket.close();
			}
		}
	}

	public static void main(String[] args) throws IOException {
		new UdpServer().init();
	}
}

 

package hb.udp;

import java.awt.*;
import java.net.*;
import java.io.*;
import java.util.*;

public class UdpClient {
	// 定义发送数据报的目的地
	public static final int DEST_PORT = 30000;
	public static final String DEST_IP = "127.0.0.1";

	// 定义每个数据报的最大大小为4K
	private static final int DATA_LEN = 4096;
	// 定义该客户端使用的DatagramSocket
	private DatagramSocket socket = null;
	// 定义接收网络数据的字节数组
	byte[] inBuff = new byte[DATA_LEN];
	// 以指定字节数组创建准备接受数据的DatagramPacket对象
	private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);
	// 定义一个用于发送的DatagramPacket对象
	private DatagramPacket outPacket = null;

	public void init() throws IOException {
		try {
			// 创建一个客户端DatagramSocket,使用随机端口
			socket = new DatagramSocket();
			// 初始化发送用的DatagramSocket,它包含一个长度为0的字节数组
			outPacket = new DatagramPacket(new byte[1024], 5, InetAddress.getByName(DEST_IP), DEST_PORT);
			// 创建键盘输入流
			Scanner scan = new Scanner(System.in);
			// 不断读取键盘输入
			while (scan.hasNextLine()) {
				// 将键盘输入的一行字符串转换字节数组
				byte[] buff = scan.nextLine().getBytes();
				System.out.println("--------------"+buff[0]);
				// 设置发送用的DatagramPacket里的字节数据
				outPacket.setData(buff);
				// 发送数据报
				socket.send(outPacket);
				// 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。
				socket.receive(inPacket);
				System.out.println(new String(inBuff, 0, inPacket.getLength()));
			}
		}
		// 使用finally块保证关闭资源
		finally {
			if (socket != null) {
				System.out.println("udpclient close");
				socket.close();
			}
		}
	}

	public static void main(String[] args) throws IOException {
		new UdpClient().init();
	}
}

 

基于UDP(面向无连接)的socket编程

说明:本程序是基于windows socket的套接字库实现网络编程; 当WSAStartup函数调用成功后,在程序的最后都需要相应的调用WSACleanup函数 以便释放为该应用程序分配的资...
  • xiao3404
  • xiao3404
  • 2017年04月08日 17:12
  • 375

VC环境下UDP&nbsp;Socket编程示例

原文地址:Socket编程示例">VC环境下UDP Socket编程示例作者:阿明  VC下的Socket编程要包含winsock2.h头文件,并在项目设置中加入链接库ws2_32.lib.下面是一个...
  • Helloguoke
  • Helloguoke
  • 2013年11月22日 11:03
  • 1036

Java网络编程实践和总结 --- 基于UDP的Socket编程

前面的blog介绍和总结基于TCP协议的网络编程。TCP提供了一种可靠的传输方式。如果数据在传输过程丢失或者损坏了,TCP会保证数据会再次发送,直到数据完整接受。如果数据包以乱序到达目的地,TCP也会...
  • joeyjobs
  • joeyjobs
  • 2015年04月02日 19:54
  • 1751

android编程3:socket编程之udp发送

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 需要实现的功能:采用udp下的socket编程,当按下确认键,模拟器发送文本框数据,pc机上的网络...
  • jdh99
  • jdh99
  • 2011年08月15日 10:50
  • 13603

C语言的Socket编程例子(TCP和UDP)

server端: #include "stdafx.h" #include #include #pragma comment(lib,"ws2_32.lib") int main(int ar...
  • chinazhd
  • chinazhd
  • 2015年04月19日 23:15
  • 57840

linux socket编程以及简单的tcp,udp的例子

linux socket编程以及简单的tcp,udp的例子通过socket编程大致对网路编程的脉络有个大致的了解,如果有不太懂的地方, 咱们可以到网络上查找手册socket的基本操作创建socket...
  • cabing2005
  • cabing2005
  • 2016年11月07日 18:40
  • 5088

TCP/UDP Socket编程步骤

sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW); WINDOWS环境下TCP/UDP编程步骤: 1....
  • aizquan
  • aizquan
  • 2014年04月05日 15:40
  • 2411

java_基础_socket编程UDP--实用

UDP通道:以数据为中心,非面向连接,不安全,数据可能丢失,效率高 一、类(DatagramSocket DategramPacket) a) 客户端: i. 创建 客户端:Dategram...
  • li_Sponge_Crazy_
  • li_Sponge_Crazy_
  • 2016年10月28日 19:05
  • 652

基于TCP/IP和UDP协议的socket编程结构解析

1.套接字(socket) socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作...
  • ZhengNice
  • ZhengNice
  • 2016年05月16日 21:45
  • 2324

C#-Socket编程-UDP

服务器端 static void Main(string[] args) {   //1. Socket udpserver=new Socket(AddressFamily.InterNe...
  • u014800094
  • u014800094
  • 2017年01月11日 11:57
  • 134
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UDP socket编程
举报原因:
原因补充:

(最多只允许输入30个字)