`
tzylwl
  • 浏览: 92044 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

DatagramSocket封装数据发给服务器

阅读更多
服务端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ServerSocket {

public static final int PORT = 30009;
// 定义每个数据报的最大大小为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());
// 将接收到的内容转成字符串后输出
String result=new String(inBuff, 0, inPacket.getLength());
byte[] sendData=null;
if(result.equals("1")){
    sendData="TAOZHANGYI".getBytes();
}else if(result.equals("2"))
{
sendData="LIUWENLING".getBytes();
}else if(result.equals("3"))
{
sendData="JIANGXUYUN".getBytes();
}else
{
sendData="陶章义".getBytes();
}
// 从字符串数组中取出一个元素作为发送的数据
// byte[] sendData = books[i % 4].getBytes();

// 以指定字节数组作为发送数据、以刚接受到的DatagramPacket的
// 源SocketAddress作为目标SocketAddress创建DatagramPacket。

outPacket = new DatagramPacket(sendData, sendData.length,
inPacket.getSocketAddress());

System.out.println("sendData:"+sendData+"******"+"sendData.length:"+sendData.length+"*********"+"inPacket.getSocketAddress:"+inPacket.getSocketAddress());
// 发送数据
socket.send(outPacket);

}
} catch (Exception e) {
             System.out.println(e.toString());
} finally    //使用finally块保证关闭资源
{
if (socket != null) {
socket.close();
}
}

}

public static void main(String[] args) {
try {
new ServerSocket().init();
} catch (Exception e) {

}

}







客户端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class UdpClient {

public static final int DEST_PORT = 30009;
public static final String DEST_IP = "127.0.0.1";
private static final int DATA_LEN = 4096;
private DatagramSocket socket = null;
byte[] inBuff = new byte[DATA_LEN];
private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);   //接收数据包
private DatagramPacket outPacket = null;

public void init()throws IOException{
try {
socket = new DatagramSocket();
outPacket = new DatagramPacket(new byte[0] , 0 ,InetAddress.getByName(DEST_IP) , DEST_PORT); //发送数据包
Scanner scan = new Scanner(System.in);
while(scan.hasNextLine()){
byte[] buff = scan.nextLine().getBytes();
outPacket.setData(buff);
socket.send(outPacket);    //发送
socket.receive(inPacket);  //接收

System.out.println("***"+new String(inBuff ,0, inPacket.getLength()));   //解析接收的数据
}
} catch (Exception e) {

}finally
{
if (socket != null){socket.close();}
}
}
public static void main(String[] args) {
try {
new UdpClient().init();
} catch (Exception e) {
// TODO: handle exception
}

}
0
4
分享到:
评论

相关推荐

    DatagramSocket

    - **多播支持**:除了基本的点对点通信外,`DatagramSocket` 还支持多播通信,这使得多个客户端可以同时接收来自服务器的广播消息。 - **错误处理**:由于UDP本身是不可靠的,所以在使用 `DatagramSocket` 时需要...

    java DatagramSocket 的上传文件客户端

    - 客户端将文件内容切分为512字节的数据块,每个数据块封装成一个`DatagramPacket`发送。 - 服务器接收到数据块后,发送ACK确认。 - 如果数据包丢失或错序,服务器不会重新发送,而是等待超时,客户端会重发数据...

    网路编程-UDP-DatagramSocket、DatagramPacket

    在实际编程中,我们通常会创建一个`DatagramSocket`实例,然后创建一个`DatagramPacket`来封装数据,并设置目标地址和端口。然后,我们可以调用`send()`方法发送数据报,接着使用`receive()`来接收数据报。需要注意...

    Java DataGramSocket的Connect方法问题

    Java中的DataGramSocket类是实现UDP协议的主要工具,UDP是一种无连接的、不可靠的传输层协议,它的特点是轻量级、高效,适用于实时数据传输和不需要确认的通信场景。然而,DataGramSocket类提供了一个`connect()`...

    DatagramSocket通信一

    NULL 博文链接:https://liaolzy.iteye.com/blog/772962

    DatagramSocket And DatagramPacket

    客户端(`udpClient`)则创建`DatagramSocket`,创建`DatagramPacket`来封装要发送的数据,然后通过`send()`方法将数据发送到服务器。 在实际应用中,`DatagramSocket`和`DatagramPacket`的使用需要注意以下几点: ...

    自己做的UDP客户端和服务器端

    - 数据准备好后,用`DatagramPacket`封装数据,指定服务器的IP地址和端口。 - 使用`DatagramSocket.send()`发送数据报。 - 若要接收服务器的响应,也需要创建一个`DatagramPacket`,并调用`DatagramSocket....

    基于JAVA的UDP服务器模型源代码

    当服务器接收数据时,会创建一个DatagramPacket对象,设置其接收缓冲区大小,然后调用DatagramSocket的receive方法,将接收到的数据存入这个包中。反之,若要发送数据,需要先创建一个DatagramPacket,包含要发送的...

    C# Socket 客户端服务端封装带使用实例

    Socket支持两种主要的网络协议:TCP(传输控制协议)和UDP(用户数据报协议),分别对应StreamSocket和DatagramSocket。 三、Socket客户端封装 1. 创建Socket实例:使用Socket类的构造函数初始化Socket对象,指定...

    UDP封装类UDP封装类

    UDP封装类是用于处理UDP通信的核心组件,通常在编程中,我们会使用特定的语言来实现这些类,以便于更方便地发送和接收UDP数据报。 **UDP的特点:** 1. **无连接性**:UDP在发送数据之前不需要建立连接,因此可以...

    基于Java实现de UDP数据传输,双向传输,接收端和发送端,服务器

    服务器端:创建DatagramSocket对象用于打开指定端口并监听,然后用创建一个DatagramPacket,利用DatagramSocket中的receive(ds)方法接收数据并放到刚创建的DatagramPacket对象中; 这样就完成了简单的发送,接收...

    【Socket编程】--UDP异步通讯一服务器多客户端

    - 发送数据:封装数据到DatagramPacket,然后使用send方法发送到服务器的特定端口。 - 接收消息:设置DatagramSocket监听,以便接收服务器广播过来的消息。 5. 多客户端处理 在不使用多线程的情况下,服务器可以...

    udp传输数据

    UDP通信的基本步骤包括创建DatagramSocket、封装数据、发送数据以及接收数据。以下是一个简单的UDP发送和接收数据的示例: **创建DatagramSocket** 在Java中,我们需要创建一个DatagramSocket对象来代表一个UDP...

    android所有socket操作封装

    首先,需要指定服务器的IP地址和端口号,然后调用`connect()`方法建立连接。在连接过程中,需要处理异常,例如`UnknownHostException`和`IOException`。 ```java Socket socket = new Socket(); try { socket....

    TCP与UDP客户服务端实现大小写及SOCKET编程实现聊天程序

    服务器端使用DatagramSocket来监听客户端的连接请求,而客户端使用DatagramSocket来发送数据到服务器端。 在服务器端,使用DatagramPacket来接收客户端的数据,并将其转换为大写字母,然后将结果返回给客户端。...

    基于JAVA的UDP服务器模型源代码.zip

    1. 创建DatagramSocket:服务器和客户端都需要创建DatagramSocket实例来收发数据报。 2. 准备数据:数据通常以字节数组的形式封装在DatagramPacket对象中。 3. 发送数据:通过DatagramSocket的send()方法将数据包...

    javaUDP实现服务器客户端大小写的转换

    4. **发送数据**:调用`DatagramSocket.send(DatagramPacket packet)`将数据报发送给服务器。 5. **接收响应**:使用`DatagramSocket.receive(DatagramPacket packet)`接收服务器的响应。 6. **处理响应**:从接收到...

    UDP与服务器通讯demo

    4. **接收数据**: 调用`DatagramSocket`的`receive()`方法来接收来自服务器的数据。这个方法会阻塞直到接收到一个数据包,然后返回一个`DatagramPacket`,其中包含接收到的数据和发送方的信息。 5. **多线程处理**:...

    客户端与服务器的连接并可发送信息

    - `DatagramSocket`用于发送和接收数据包,而`DatagramPacket`封装了要发送的数据和接收的数据包的信息。 7. **信息交流**: - 无论是TCP还是UDP,客户端与服务器之间的信息交流都涉及到数据编码(如JSON、XML或...

    UDP简易客户端与服务器端程序(Java)

    然后,它调用`receive()`方法,该方法会阻塞直到有数据到达,此时客户端就可以读取服务器返回的数据了。 这个简单的UDP通信模型揭示了以下几个关键知识点: 1. **DatagramSocket**:这是UDP通信的核心,用于创建...

Global site tag (gtag.js) - Google Analytics