- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个小型 UDP 客户端,它将数据包发送到某个本地地址,另一个小型 UDP 客户端将接收它们并在控制台上打印其包含的内容。他们目前没有工作,我不知道为什么。
这是发送代码:
import java.io.*;
import java.net.*;
class ClienteUDPtx {
static final String HOST = "192.168.1.201";
static final int PUERTO=20001;
/**
UDP Client which will send some UDP packets
to local network address 192.168.1.201 on port 20001
*/
public ClienteUDPtx( ) {
try{
int i = 0;
String[] ip_parts = HOST.split(".");
byte[] ip_num = {0, 0, 0, 0};
for (String string : ip_parts) {
ip_num[i++] = Byte.valueOf(string);
}
InetAddress ip = InetAddress.getByAddress(ip_num);
DatagramSocket skCliente = new DatagramSocket(PUERTO, ip);
DatagramPacket packet;
File testFile = new File("test.txt");
BufferedReader input = new BufferedReader(new FileReader(testFile));
String line;
while((line=input.readLine())!=null) {
System.out.println("Sending: " + line);
byte message[] = line.getBytes();
packet = new DatagramPacket(message, message.length, ip, PUERTO);
skCliente.send(packet);
Thread.currentThread().sleep(1000);
}
line = "END";
System.out.println("Sending: " + line);
byte message[] = line.getBytes();
packet = new DatagramPacket(message, message.length, ip, PUERTO);
skCliente.send(packet);
input.close();
skCliente.close();
} catch( Exception e ) {
System.out.println( e.getMessage() );
}
}
public static void main( String[] arg ) {
new ClienteUDPtx();
}
}
这是接收代码:
import java.io.*;
import java.net.*;
class ClienteUDPrx {
static final String HOST = "192.168.1.101";
static final int PUERTO=20001;
/**
UDP Client which will listen for incoming UDP packets
from local network address 192.168.1.101 on port 20001
and will print its content on console
*/
public ClienteUDPrx( ) {
try{
int i = 0;
String[] ip_parts = HOST.split(".");
byte[] ip_num = {0, 0, 0, 0};
for (String string : ip_parts) {
ip_num[i++] = Byte.valueOf(string);
}
InetAddress ip = InetAddress.getByAddress(ip_num);
DatagramSocket skCliente = new DatagramSocket(PUERTO, ip);
byte[] buffer = new byte[2048];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while(true){
// Wait to receive a datagram
skCliente.receive(packet);
String lineaLeida = new String(buffer, 0, packet.getLength());
System.out.println(packet.getAddress().getHostName() + ": "+ lineaLeida);
if(lineaLeida.equals("END")) break;
}
skCliente.close();
System.out.println( "Transmission ended" );
} catch( Exception e ) {
System.out.println( e.getMessage() );
}
}
public static void main( String[] arg ) {
new ClienteUDPrx();
}
}
有什么想法吗?
最佳答案
这里有一些错误。
第一个是创建 InetAddress。您可以这样做,而不是尝试分离出字节并从数组中重新创建它:
InetAddress.getByName(HOST);
它刚才失败了,因为当您拆分 HOST 时,您将其拆分为正则表达式并使用“.”。它具有特殊含义,因此实际上并不是根据“.”分割字符串。性格。
实际上将其拆分为“.”你会这样做:
HOST.split("\\.")
但是你的字节解析失败,因为字节的范围是 -128 到 +127(而不是 0 到 255)。
无论如何,这可能让您感到困惑是因为您的打印错误。
这一行:
System.out.println( e.getMessage() );
正在打印异常错误(在本例中只是“0”-“ArrayIndexOutOfBoundsException:0”)。
相反,你应该这样做:
e.printStackTrace();
获取有关问题所在的更多信息。
除了这些之外,我看不到任何明显的问题。
我还要指出,UDP 确实检查消息的完整性。它不保证传送或传送顺序,因此您可能会丢失数据包或有时使它们失去顺序,但它确实有一个校验和,其中包括消息的 header +有效负载。
关于Java UDP发送/接收小例子不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240090/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!