62,621
社区成员
发帖
与我相关
我的任务
分享
package cn.edu.usst;
import java.net.*;
public class UDPServer {
private static final int PORT = 50000;
private DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte receiveByte[];
public String receiveStr;
//public UDPServer() {
// Init();
//}
public String Init() {
try {
dataSocket = new DatagramSocket(PORT);
receiveByte = new byte[1024];
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = "";
int i = 0;
while (i == 0)// 无数据,则循环
{
dataSocket.receive(dataPacket);
i = dataPacket.getLength();
// 接收数据
System.out.println("正在接收数据。。。。。。");
if (i > 0) {
// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点
receiveStr = new String(receiveByte, 0, dataPacket.getLength());
System.out.println(receiveStr);
i = 0;// 循环接收
}
}
}
catch (Exception e) {
e.printStackTrace();
//System.out.println("2");
}
finally{
if (dataSocket != null ){
dataSocket.close();
//System.out.println("3");
}
}
return receiveStr;// 返回值,在主函数中等待调用
}
}package cn.edu.usst;
public class NavigationSystem{
public static void main(String args[]) {
UDPServer udpserver = new UDPServer();
udpserver.Init();
//System.out.println("gpsdata" + UDPServer.receiveStr );
System.out.println("gpsdata" + udpserver.Init() );
}
}System.out.println("gpsdata" + udpserver.Init() );
和你说的String str = udpserver.Init();System.out.println("gpsdata" + str ); 效果不是一样的吗
“<span style="color: #FF0000;">return receiveStr;</span>” 本来是想高亮显示 结果不行 我重新编辑了[/quote]那你想怎么调用返回值?[/quote]
我知道问题出在哪了 不是调用的问题 是我循环采集数据 这样返回值不行[/quote]你还不如一次性把你的需求说完[/quote]我想取出通过循环得到的数据 为下一步解析用 不知道怎么解觉 有什么思路while (i == 0)// 无数据,则循环 { dataSocket.receive(dataPacket); i = dataPacket.getLength(); // 接收数据 System.out.println("正在接收数据。。。。。。"); if (i > 0) { // 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点 receiveStr = new String(receiveByte, 0, dataPacket.getLength()); System.out.println(receiveStr); i = 0;// 循环接收 } } [/quote]有什么解决方案吗
import java.net.*;
public class SendByDatapocket {
public SendByDatapocket() throws Exception {
DatagramSocket clientsocket = new DatagramSocket();
String str = "hello world";
//DatagramPacket packet = new DatagramPacket(str.getBytes(),
// str.length(), InetAddress.getByName("localhost"), 3000);
int i = 0;
while(i++ < 100){
try {
Thread.sleep(100);
}
catch(InterruptedException ie){
ie.printStackTrace();
}
DatagramPacket packet = new DatagramPacket((str + " " + i + ":").getBytes(),
(str + " " + i + ":").length(), InetAddress.getByName("localhost"), 50000);
clientsocket.send(packet);
}
clientsocket.close();
}
public static void main(String[] args) throws Exception {
new SendByDatapocket();
}
}
public class NavigationSystem{
public static void main(String args[]) {
UDPServer udpserver = new UDPServer();
Thread t = new Thread(udpserver);//----------------创建并启动线程。
t.start();
String old = "";
String newString = "";
while(true) {//---------------------循环接收数据,如果为空并且不重复,显示。
newString = udpserver.getReceiveStr();
if( null != newString && !old.equals(newString)) {
System.out.println("gpsdata" + newString );
old = newString;
}
}
}
}
import java.net.*;
public class UDPServer implements Runnable{//---------------实现runnable 接口。
private static final int PORT = 50000;
private DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte receiveByte[];
private String receiveStr;//-----------------参数私有
// public UDPServer() {
// Init();
// }
public String getReceiveStr() {//--------------公共读方法
return receiveStr;
}
public void run() {//-----------------------init 方法改为run 方法。
try {
dataSocket = new DatagramSocket(PORT);
receiveByte = new byte[1024];
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = "";
int i = 0;
while (i == 0) {// 无数据,则循环
dataSocket.receive(dataPacket);
i = dataPacket.getLength();
// 接收数据
System.out.println("正在接收数据。。。。。。");
if (i > 0) {
// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点
receiveStr = new String(receiveByte, 0,
dataPacket.getLength());
System.out.println(receiveStr);
i = 0;// 循环接收
}//end if
}//end while
} catch (Exception e) {
e.printStackTrace();
// System.out.println("2");
} finally {
if (dataSocket != null) {
dataSocket.close();
// System.out.println("3");
}
}
}
}System.out.println("gpsdata" + udpserver.Init() );
和你说的String str = udpserver.Init();System.out.println("gpsdata" + str ); 效果不是一样的吗
“<span style="color: #FF0000;">return receiveStr;</span>” 本来是想高亮显示 结果不行 我重新编辑了[/quote]那你想怎么调用返回值?System.out.println("gpsdata" + udpserver.Init() );
和你说的String str = udpserver.Init();System.out.println("gpsdata" + str ); 效果不是一样的吗
“<span style="color: #FF0000;">return receiveStr;</span>” 本来是想高亮显示 结果不行 我重新编辑了String str = udpserver.Init();就行了
你这句是什么意思?“<span style="color: #FF0000;">return receiveStr;</span>”while (i == 0)// 无数据,则循环 { dataSocket.receive(dataPacket); i = dataPacket.getLength(); // 接收数据 System.out.println("正在接收数据。。。。。。"); if (i > 0) { // 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点 receiveStr = new String(receiveByte, 0, dataPacket.getLength()); System.out.println(receiveStr); i = 0;// 循环接收 } } receiveStr = new String(receiveByte, 0, dataPacket.getLength()); 这是通过while循环接收的GPS定位信息(也就说数据无限的) 我怎样返回这个信息 为下一步解析用 有什么比较好的思路receiveStr = new String(receiveByte, 0, dataPacket.getLength()); 这是通过while循环接收的GPS定位信息(也就说数据无限的) 我怎样返回这个信息 为下一步解析用 有什么比较好的思路receiveStr = new String(receiveByte, 0, dataPacket.getLength()); 这是通过while循环接收的GPS定位信息(也就说数据无限的) 我怎样返回这个信息 为下一步解析用 有什么比较好的思路
System.out.println("gpsdata" + udpserver.Init() );
和你说的String str = udpserver.Init();System.out.println("gpsdata" + str ); 效果不是一样的吗
“<span style="color: #FF0000;">return receiveStr;</span>” 本来是想高亮显示 结果不行 我重新编辑了[/quote]那你想怎么调用返回值?[/quote]
我知道问题出在哪了 不是调用的问题 是我循环采集数据 这样返回值不行[/quote]你还不如一次性把你的需求说完System.out.println("gpsdata" + udpserver.Init() );
和你说的String str = udpserver.Init();System.out.println("gpsdata" + str ); 效果不是一样的吗
“<span style="color: #FF0000;">return receiveStr;</span>” 本来是想高亮显示 结果不行 我重新编辑了[/quote]那你想怎么调用返回值?[/quote]
我知道问题出在哪了 不是调用的问题 是我循环采集数据 这样返回值不行