Java的UDP通信
2012-06-03 23:31
232 查看
/**
*UDPServer
*@author Winty wintys@gmail.com
*@version 2008-12-15
*/
import java.io.*;
import java.net.*;
class UDPServer{
public static void main(String[] args)throws IOException{
DatagramSocket server = new DatagramSocket(5050);
byte[] recvBuf = new byte[100];
DatagramPacket recvPacket
= new DatagramPacket(recvBuf , recvBuf.length);
server.receive(recvPacket);
String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength());
System.out.println("Hello World!" + recvStr);
int port = recvPacket.getPort();
InetAddress addr = recvPacket.getAddress();
String sendStr = "Hello ! I'm Server";
byte[] sendBuf;
sendBuf = sendStr.getBytes();
DatagramPacket sendPacket
= new DatagramPacket(sendBuf , sendBuf.length , addr , port );
server.send(sendPacket);
server.close();
}
}
/**
*UDPClient
*@author Winty wintys@gmail.com
*@version 2008-12-15
*/
import java.io.*;
import java.net.*;
class UDPClient{
public static void main(String[] args)throws IOException{
DatagramSocket client = new DatagramSocket();
String sendStr = "Hello! I'm Client";
byte[] sendBuf;
sendBuf = sendStr.getBytes();
InetAddress addr = InetAddress.getByName("127.0.0.1");
int port = 5050;
DatagramPacket sendPacket
= new DatagramPacket(sendBuf ,sendBuf.length , addr , port);
client.send(sendPacket);
byte[] recvBuf = new byte[100];
DatagramPacket recvPacket
= new DatagramPacket(recvBuf , recvBuf.length);
client.receive(recvPacket);
String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength());
System.out.println("收到:" + recvStr);
client.close();
}
}
=========================================================================================
用户数据报(UDP)是网络信息传输的一种形式。在《网络编程之了解TCP/UDP网络协议 》一文中已经讲到了UDP通信和TCP通信的不同,UDP传输数据快,但是不稳定。使用UDP通信时,用户无法知道数据能否正确到达主机,也不能确定到达目的地的顺序是否和发送顺序相同。虽然UDP是不可靠的,但是对于一些可以容忍小错误的信息传输,此时可以考虑UDP。 UDP的通信模式为:1.数据打包(数据包)。将数据包发往目的地。
2.接收比人发的数据包,然后读数据包内容。 UDP数据包发送步骤: 1.使用DatagramSocket()创建一个数据包套接字。
2.使用DatagramPacket()创建要发送的数据包。 3.使用DatagramSocket()类的send()方法发送数据包。 UDP数据包接收步骤: 1.使用DatagramSocket(int
port)创建一个数据包套接字,绑定到指定端口。 2.使用DatagramPacket()创建字节数组接收数据包。 3.使用DatagramPacket()类的receive()方法接受数据包。 关于DatagramSocket类DatagramSocket类建立UDP程序的套接字。每个在数据报套接字上发送或接收的包都是单独编址和路由的。
方法1. new DatagramSocket();//创建绑定到本地主机上任何可用的端口 方法2. new DatagramSocket(int port);//创建绑定到本地主机上指定的端口 方法3. new DatagramSocket(int port,InetAddress address);//创建绑定的指定本地地址,方法适用于多块网卡和多个IP地址。 关于DatagramPacket类 此类表示数据报包,数据报包用来实现无连接包投递服务。每条报文只根据该包包含的信息,从一台计算机路由到另一台计算机。
方法1. new DatagramPacket(byte[] buf,int length);//指定接收长度创建对象。 方法2. new DatagramPacket(byte[] buf,int length,InetAddress address,int port);//指定数据包内存空间大小,同时指定数据包发送目标地址和端口。 以下程序演示如何实现,服务端接受数据,再发送数据。客户端发送数据,再接收数据。 服务器端代码:
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UDPServer { public static void main(String[] args) { DatagramSocket server; try { server = new DatagramSocket(9999); byte[] buf = new byte[100]; DatagramPacket packet = new DatagramPacket(buf, buf.length); server.receive(packet); String str = new String(packet.getData(), 0, buf.length); System.out.println("Hello!" + str); int port = packet.getPort(); InetAddress address = packet.getAddress(); String str1 = "我是服务器,我广播信息给你"; byte[] sendBuf; sendBuf = str1.getBytes(); DatagramPacket sendpacket = new DatagramPacket(sendBuf, sendBuf.length, address, port); server.send(sendpacket); server.close(); } catch (Exception e) { e.printStackTrace(); } } }
客户端代码:
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UDPClient { public static void main(String[] args) { DatagramSocket client; try { client = new DatagramSocket(); String sendStr = "你好,我是客户机"; byte[] sendBuf; sendBuf = sendStr.getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); int port = 9999; DatagramPacket sendpacket = new DatagramPacket(sendBuf, sendBuf.length, address, port); client.send(sendpacket); byte[] recBuf = new byte[100]; DatagramPacket recpacket = new DatagramPacket(recBuf, recBuf.length); client.receive(recpacket); String str = new String(recpacket.getData(), 0, recBuf.length); System.out.println("收到:" + str); client.close(); } catch (Exception e) { e.printStackTrace(); } } }
执行结果: 服务端收到信息->Hello!你好,我是客户机. 客户端收到信息->我是服务器,我广播信息给你
相关文章推荐
- TCP与UDP通信协议及Java实现
- Java 网络编程(六) 使用无连接的数据报(UDP)进行通信
- TCP、UDP协议,java网络通信基础
- java基于UDP协议的通信
- Java网络编程:UDP通信
- 黑马程序员_Java学习日记第八天--TCP/UDP通信、正则表达式
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- JAVA SE篇--10 TCP、UDP通信
- TCP与UDP通信协议及Java实现
- Java TCP/UDP网络通信编程
- Java udp简单通信
- Java中的TCP/UDP网络通信编程
- JAVA 网络编程 UDP通信
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- Java_SE11-TCP通信,UDP通信
- 疯狂java UDP协议的网络通信
- Java系列讲座二:Socket网络通信实现聊天软件项目讲解(UDP)
- TCP与UDP通信协议及Java实现
- Java UDP通信示例
- java TCP与UDP通信