udp收不到,为什么

jokesh 2011-08-09 09:28:11
您好,大家们

我从远程电脑发udp数据,但我收不到,为什么? 我给远程 机子我的ip地址了。。。。 本地运行没有问题。。。就从远程电脑收不到udp数据。。。。怎么解决?
...全文
826 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
-droidcoffee- 2013-03-28
  • 打赏
  • 举报
回复
mark 一下 , 这个很不错,晚上回家研究一下
笑莫问 2012-12-25
  • 打赏
  • 举报
回复
1、两台机器是在同一个局域网么,是不是能ping通,可以的话检查下防火墙之类,或者直接看两台电脑之间能不能共享数据。 2、UDP协议传输本来就是不可靠的,发送数据丢包时有发生,看lz每次收不到,应该就不是这个原因。
jackwangbo 2012-12-25
  • 打赏
  • 举报
回复
晕死 这里就没人懂吗?!!!!!!!!!!1
jokesh 2011-08-23
  • 打赏
  • 举报
回复
这个真的太麻烦了 怎么解决? 谢谢大家
往何 2011-08-15
  • 打赏
  • 举报
回复
标记一下,学习
xiachedan 2011-08-15
  • 打赏
  • 举报
回复
都说过了,如果是局域网收不到,那就是防火墙的问题,配置方法我前面也提到了.
jokesh 2011-08-11
  • 打赏
  • 举报
回复
怎么解决?
jokesh 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiachedan 的回复:]

如果本地测试通过,那就是防火墙的问题,把你自己的防火墙关掉!

如果跨网络了,相应的防火墙也要开放端口.
[/Quote]

恩 防火墙怎么解决?

我的发udp代码:

try {       
int port = 7777;
byte[] msg = chattext.getText().getBytes();

// Get the internet address of the specified host
InetAddress address = InetAddress.getByName("124.126.176.80");//my pc`s ip adress

// Initialize a datagram packet with data and address
DatagramPacket packet = new DatagramPacket(msg, msg.length,
address, port);

packet.getPort();

// Create a datagram socket, send the packet through it, close it.
DatagramSocket dsocket = new DatagramSocket();
dsocket.send(packet);
dsocket.close();
} catch (Exception e) {
e.printStackTrace();
}




udp接受代码:

try {  
int port = 7777;

InetAddress address = InetAddress.getLocalHost();

DatagramSocket dsocket = new DatagramSocket(port, address);

byte[] buffer = new byte[65000];

DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

// Now loop forever, waiting to receive packets and printing them.
while (true) {


dsocket.receive(packet);
String longtex=new String(buffer, 0, packet.getLength());
..............



请大家帮我解决这个问题 谢谢大家。。。
luohuijun619 2011-08-10
  • 打赏
  • 举报
回复
防火墙,再过UPD本来就是一种不稳定的协议包,不一定全部能收到
xiachedan 2011-08-10
  • 打赏
  • 举报
回复
如果本地测试通过,那就是防火墙的问题,把你自己的防火墙关掉!

如果跨网络了,相应的防火墙也要开放端口.
jokesh 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mrzhong1128 的回复:]

UDP:
package UDP.client;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class MyUDPclient {
public static voi……
[/Quote]

我的代码也本地运行 100% good...
但 从其他电脑收不到udp。。。。。是防火墙的,还是别的什么原因? 谢谢
jokesh 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mrzhong1128 的回复:]

可以参考下。。。
[/Quote]

谢谢 要用UDP hole punching(UDP打洞技术)吗?

我看看 您的代码。。。
MrZhong1128 2011-08-10
  • 打赏
  • 举报
回复
可以参考下。。。
MrZhong1128 2011-08-10
  • 打赏
  • 举报
回复
UDP:
package UDP.client;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class MyUDPclient {
public static void main(String[] args) {
try {
//创建socket绑定到指定的端口
DatagramSocket socket = new DatagramSocket(2011);
sendThread s = new sendThread(socket);
s.start();
while(true){
//接受信息
byte receiveb[] = new byte[1024];
DatagramPacket receivepacket = new DatagramPacket(receiveb,receiveb.length);
socket.receive(receivepacket);
String str = new String(receiveb,0,receivepacket.getLength());
System.out.println("收到 服务器 信息:"+str);
System.out.println("请输入发给 服务器 的信息:");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

class sendThread extends Thread{
DatagramSocket socket = null;
Scanner in = new Scanner(System.in);

public sendThread(DatagramSocket socket){
this.socket = socket;
}

public void run() {
try {
System.out.println("请输入发给 服务器 的信息:");
while(true){
//发送信息
String sendstr = in.next();
byte sendb[] = sendstr.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
//创建一个发送数据报,address为接收方地址,port(2012)为接收方端口
DatagramPacket sendpacket = new DatagramPacket(sendb,sendb.length,address,2012);
socket.send(sendpacket);
}
}catch (Exception e) {
e.printStackTrace();
}
}
}



package UDP.server;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class MyUDPserver {
public static void main(String[] args) {
try {
//创建socket绑定到指定的端口
DatagramSocket socket = new DatagramSocket(2012);
sendThread s = new sendThread(socket);
s.start();
while(true){
//接受信息
byte receiveb[] = new byte[1024];
//创建接收数据报对象,能接收实际长度字节的数据放到receive位置
DatagramPacket receivepacket = new DatagramPacket(receiveb,receiveb.length);
socket.receive(receivepacket);
String str = new String(receiveb,0,receivepacket.getLength());
System.out.println("收到 客户 信息:"+str);
System.out.println("请输入发给 客户 的信息:");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

class sendThread extends Thread{
DatagramSocket socket = null;
Scanner in = new Scanner(System.in);

public sendThread(DatagramSocket socket) {
this.socket = socket;
}

public void run() {
try {
while(true){
//发送信息
String sendstr = in.next();
byte sendb[] = sendstr.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
//创建一个发送数据报,address为接收方地址,port(2011)为接收方端口
DatagramPacket sendpacket = new DatagramPacket(sendb,sendb.length,address,2011);
socket.send(sendpacket);
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
MrZhong1128 2011-08-10
  • 打赏
  • 举报
回复
TCP:
package TCP.client;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
//客户端口
public class TCPclient {
public static void main(String[] args){
//捕获异常
try {
Socket s = new Socket("127.0.0.1",1025);
//获取Socket的输出流,用于发送信息
OutputStream out = s.getOutputStream();
//获取Socket的输入流,用于读取信息
InputStream in1 = s.getInputStream();
myclient mc = new myclient(out);
mc.start();
while(true){
//读取以字节byte为单位的信息
byte b1[] = new byte[1024];
//读取服务器端回复的信息的长度
int len = in1.read(b1);
//把 byte数组转换成字符串,b 是byte数组,0和len是指转换的长度
String str1 = new String(b1,0,len);
//输出服务器端回复的信息
System.out.println("服务器端回复了消息:"+str1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

class myclient extends Thread{
Scanner in = new Scanner(System.in);
OutputStream out = null;
public myclient(OutputStream out){
this.out=out;
}
public void run() {
try {
while(true){
System.out.println("请输入您要发给 服务器端 的信息:");
String str = in.next();
byte b[] = str.getBytes();
//读写发给对方的信息
out.write(b);
//刷新
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}



package TCP.server;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
//服务器端口
public class TCPserver {
public static void main(String[] args) {
//捕获异常
try {
//定义一个TCP的服务器端,指定程序运行在那个端口号上 该端口可自定义
ServerSocket ss = new ServerSocket(1025);
//等待客户端的请求
Socket s = ss.accept();
//获取Socket的输入流,用于读取信息
InputStream in1 = s.getInputStream();
//获取Socket的输出流,用于发送信息
OutputStream out = s.getOutputStream();
myserver ms = new myserver(out);
ms.start();
while(true){
//读取以字节byte为单位的信息
byte b[] = new byte[1024];
//读取客户端发来的信息的实际长度
int len = in1.read(b);
//把 byte数组转换成字符串,b 是 byte数组,0和len是指转换的长度
String str = new String(b,0,len);
//输出客户端发来的信息
System.out.println("客户端发来了信息:"+str);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

class myserver extends Thread{
Scanner in = new Scanner(System.in);
OutputStream out = null;
public myserver(OutputStream out) {
this.out=out;
}
public void run() {
try {
while(true){
System.out.println("请输入您要发给 客户端 的信息:");
String str1 = in.next();
byte b1[] = str1.getBytes();
//读写发给对方的信息
out.write(b1);
//刷新
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
}

}
}
jokesh 2011-08-10
  • 打赏
  • 举报
回复
网管? 还是网关?
jokesh 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiachedan 的回复:]

是在一个局域网内还是多个网络内?如果在局域网,win7内是控制面板->windows 防火墙,关了就行了.

如果不在一个局域网内,那就要找网管了.
[/Quote]
谢谢。。。

不只是局域网。。。 就任何2个不同电脑(不同ip)上发收udp数据包。。。 xp系统的。。。 比如从把udp数据从北京电脑发到上海的一台电脑。。。

具体怎么去 办。。。 上面的是我的真实ip.
xiachedan 2011-08-10
  • 打赏
  • 举报
回复
是在一个局域网内还是多个网络内?如果在局域网,win7内是控制面板->windows 防火墙,关了就行了.

如果不在一个局域网内,那就要找网管了.

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧