使用DatagramSocket发送、接收数据(2)---server端
2016-12-23 11:24
483 查看
转载:http://book.51cto.com/art/201203/322542.htm (疯狂Java讲义---李刚)
下面程序使用DatagramSocket实现了Server/Client结构的网络通信。本程序的服务器端使用循环1000次来读取DatagramSocket中的数据报,每当读取到内容之后便向该数据报的发送者送回一条信息。服务器端程序代码如下。
程序清单:codes\17\17.4\UdpServer.java
public class UdpServer
{
public static final int PORT = 30000;
// 定义每个数据报的最大大小为4KB
private static final int DATA_LEN = 4096;
// 定义接收网络数据的字节数组
byte[] inBuff = new byte[DATA_LEN];
// 以指定字节数组创建准备接收数据的DatagramPacket对象
private DatagramPacket inPacket =
new DatagramPacket(inBuff , inBuff.length);
// 定义一个用于发送的DatagramPacket对象
private DatagramPacket outPacket;
// 定义一个字符串数组,服务器端发送该数组的元素
String[] books = new String[]
{
"疯狂Java讲义",
"轻量级Java EE企业应用实战",
"疯狂Android讲义",
"疯狂Ajax讲义"
};
public void init()throws IOException
{
try(
// 创建DatagramSocket对象
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
, 0 , inPacket.getLength()));
// 从字符串数组中取出一个元素作为发送数据
byte[] sendData = books[i % 4].getBytes();
// 以指定的字节数组作为发送数据,以刚接收到的DatagramPacket的
// 源SocketAddress作为目标SocketAddress创建DatagramPacket
outPacket = new DatagramPacket(sendData
, sendData.length , inPacket.getSocketAddress());
// 发送数据
socket.send(outPacket);
}
}
}
public static void main(String[] args)
throws IOException
{
new UdpServer().init();
}
}
上面程序中的粗体字代码就是使用DatagramSocket发送、接收DatagramPacket的关键代码,该程序可以接收1000个客户端发送过来的数据。
客户端程序代码也与此类似,客户端采用循环不断地读取用户键盘输入,每当读取到用户输入的内容后就将该内容封装成DatagramPacket数据报,再将该数据报发送出去;接着把DatagramSocket中的数据读入接收用的DatagramPacket中(实际上是读入该DatagramPacket所封装的字节数组中)。客户端程序代码如下。
下面程序使用DatagramSocket实现了Server/Client结构的网络通信。本程序的服务器端使用循环1000次来读取DatagramSocket中的数据报,每当读取到内容之后便向该数据报的发送者送回一条信息。服务器端程序代码如下。
程序清单:codes\17\17.4\UdpServer.java
public class UdpServer
{
public static final int PORT = 30000;
// 定义每个数据报的最大大小为4KB
private static final int DATA_LEN = 4096;
// 定义接收网络数据的字节数组
byte[] inBuff = new byte[DATA_LEN];
// 以指定字节数组创建准备接收数据的DatagramPacket对象
private DatagramPacket inPacket =
new DatagramPacket(inBuff , inBuff.length);
// 定义一个用于发送的DatagramPacket对象
private DatagramPacket outPacket;
// 定义一个字符串数组,服务器端发送该数组的元素
String[] books = new String[]
{
"疯狂Java讲义",
"轻量级Java EE企业应用实战",
"疯狂Android讲义",
"疯狂Ajax讲义"
};
public void init()throws IOException
{
try(
// 创建DatagramSocket对象
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
, 0 , inPacket.getLength()));
// 从字符串数组中取出一个元素作为发送数据
byte[] sendData = books[i % 4].getBytes();
// 以指定的字节数组作为发送数据,以刚接收到的DatagramPacket的
// 源SocketAddress作为目标SocketAddress创建DatagramPacket
outPacket = new DatagramPacket(sendData
, sendData.length , inPacket.getSocketAddress());
// 发送数据
socket.send(outPacket);
}
}
}
public static void main(String[] args)
throws IOException
{
new UdpServer().init();
}
}
上面程序中的粗体字代码就是使用DatagramSocket发送、接收DatagramPacket的关键代码,该程序可以接收1000个客户端发送过来的数据。
客户端程序代码也与此类似,客户端采用循环不断地读取用户键盘输入,每当读取到用户输入的内容后就将该内容封装成DatagramPacket数据报,再将该数据报发送出去;接着把DatagramSocket中的数据读入接收用的DatagramPacket中(实际上是读入该DatagramPacket所封装的字节数组中)。客户端程序代码如下。
相关文章推荐
- 使用DatagramSocket发送、接收数据(Socket之UDP套接字)
- 使用DatagramSocket发送、接收数据(Socket之UDP套接字)
- 使用DatagramSocket发送、接收数据(Socket之UDP套接字)
- 使用DatagramSocket发送、接收数据(Socket之UDP套接字)android遥控器
- 17.4.2 使用DatagramSocket发送、接收数据
- 基于UDP协议的网络编程(使用DatagramSocket发送接收数据)
- 使用DatagramSocket发送、接收数据(Socket之UDP套接字)
- 使用DatagramSocket发送、接收数据(Socket之UDP套接字)
- 使用DatagramSocket发送、接收数据(Socket之UDP套接字)
- 《疯狂Java讲义(第2版)》学习笔记:使用DatagramSocket发送接收数据
- UDP数据报通信 使用DatagramSocket发送、接收数据(Socket之UDP套接字)
- 17.4.2 使用DatagramSocket发送、接收数据 #知识库
- 使用DatagramSocket发送、接收数据(3)---client端
- 使用DatagramSocket发送、接收数据
- Socket —>AsyncSocket(ios socket第三方框架 AsyncSocket使用简介,连接,心跳,断线,数据发送与接收)
- ios socket第三方框架 AsyncSocket使用简介,连接,心跳,断线,数据发送与接收
- 使用Socket类接收和发送数据
- Java网络编程从入门到精通(13):使用Socket类接收和发送数据
- 使用DatagramSocket发送和读取数据
- Python中使用socket发送HTTP请求数据接收不完整问题解决方法