java程序Socket通信时有时接收不到数据
现有一套java程序,主要功能为库存管理与数据通讯,数据通讯是通过wifi接收前端设备发来的数据,java中通过ServerSocket组件实现此功能。现在的问题是,有时...
现有一套java程序,主要功能为库存管理与数据通讯,数据通讯是通过wifi接收前端设备发来的数据,java中通过ServerSocket组件实现此功能。现在的问题是,有时候前端设备发过来的数据接收不到,并且没有任何异常抛出,但此时若使用串口助手对端口(前端设备发送数据时指向的IP和端口是固定的,端口是5001)进行监测,在串口助手中可以正常接收到数据,也就是说java服务端中的Socket没有正常工作。此问题出现的时间没有任何规律,有时候一天现一两次,有时侯一天也不出现一次。java程序使用myEclipse2014开发,tomcat7.0运行,服务器win2003server,数据库sqlserver2008。
展开
若以下回答无法解决问题,邀请你更新回答
1个回答
展开全部
1、UDPRece的DatagramSocket需指定端口。
2、UdpSend的DatagramPacket的目标端口需要和UDPRece的DatagramSocket的端口一致。
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpRece {
public static void main(String[] args) throws Exception {
// 1.创建udp Socket,建立端点
DatagramSocket ds = new DatagramSocket(20000);
// 2.定义数据包。用于存储数据。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 3.通过服务的receive方法将数到数据存入数据包中
ds.receive(dp);
// 4.通过数据包的方法获取其中的数据。
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
int port = dp.getPort();
System.out.println(ip + "::" + data + "::" + port);
// 4.关闭资源
ds.close();
}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpSend {
public static void main(String[] args) throws Exception {
// 1.创建udp服务,通过DatagramSocket对象
DatagramSocket ds = new DatagramSocket(10000);
// 2.确定数据,并封装成数据包。
// DatagramPacket(byte[] buf, int length, InetAddress address, int port)
// 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
byte[] buf = "udp shu ju lai le".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.100"),
20000);
// 3.通过Socket服务,将已有的数据包发送出去。通过send方法。
ds.send(dp);
// 4.关闭资源
ds.close();
}
}
2、UdpSend的DatagramPacket的目标端口需要和UDPRece的DatagramSocket的端口一致。
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpRece {
public static void main(String[] args) throws Exception {
// 1.创建udp Socket,建立端点
DatagramSocket ds = new DatagramSocket(20000);
// 2.定义数据包。用于存储数据。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 3.通过服务的receive方法将数到数据存入数据包中
ds.receive(dp);
// 4.通过数据包的方法获取其中的数据。
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
int port = dp.getPort();
System.out.println(ip + "::" + data + "::" + port);
// 4.关闭资源
ds.close();
}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpSend {
public static void main(String[] args) throws Exception {
// 1.创建udp服务,通过DatagramSocket对象
DatagramSocket ds = new DatagramSocket(10000);
// 2.确定数据,并封装成数据包。
// DatagramPacket(byte[] buf, int length, InetAddress address, int port)
// 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
byte[] buf = "udp shu ju lai le".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.100"),
20000);
// 3.通过Socket服务,将已有的数据包发送出去。通过send方法。
ds.send(dp);
// 4.关闭资源
ds.close();
}
}
追问
你的意思是要改成UDP方式来通信么,现在是TCP方式呀
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询