当前位置:编程学习 > JAVA >>

udp收不到,为什么

您好,大家们

我从远程电脑发udp数据,但我收不到,为什么? 我给远程 机子我的ip地址了。。。。 本地运行没有问题。。。就从远程电脑收不到udp数据。。。。怎么解决? --------------------编程问答-------------------- 如果本地测试通过,那就是防火墙的问题,把你自己的防火墙关掉!

如果跨网络了,相应的防火墙也要开放端口. --------------------编程问答-------------------- 防火墙,再过UPD本来就是一种不稳定的协议包,不一定全部能收到 --------------------编程问答--------------------
引用 1 楼 xiachedan 的回复:
如果本地测试通过,那就是防火墙的问题,把你自己的防火墙关掉!

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


恩 防火墙怎么解决?

 我的发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()); 
..............



请大家帮我解决这个问题  谢谢大家。。。 --------------------编程问答-------------------- 是在一个局域网内还是多个网络内?如果在局域网,win7内是控制面板->windows 防火墙,关了就行了.

如果不在一个局域网内,那就要找网管了. --------------------编程问答--------------------
引用 4 楼 xiachedan 的回复:
是在一个局域网内还是多个网络内?如果在局域网,win7内是控制面板->windows 防火墙,关了就行了.

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

谢谢。。。

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

具体怎么去 办。。。  上面的是我的真实ip. --------------------编程问答-------------------- 网管? 还是网关? --------------------编程问答-------------------- 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();
}

}
} --------------------编程问答-------------------- 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();
}
}
} --------------------编程问答-------------------- 可以参考下。。。 --------------------编程问答--------------------
引用 9 楼 mrzhong1128 的回复:
可以参考下。。。


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

我看看 您的代码。。。 --------------------编程问答--------------------
引用 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……


我的代码也本地运行 100% good...
但 从其他电脑收不到udp。。。。。是防火墙的,还是别的什么原因? 谢谢  --------------------编程问答-------------------- 怎么解决? --------------------编程问答-------------------- 都说过了,如果是局域网收不到,那就是防火墙的问题,配置方法我前面也提到了. --------------------编程问答-------------------- 标记一下,学习 --------------------编程问答-------------------- 这个真的太麻烦了  怎么解决?  谢谢大家  --------------------编程问答-------------------- 晕死  这里就没人懂吗?!!!!!!!!!!1
--------------------编程问答-------------------- 1、两台机器是在同一个局域网么,是不是能ping通,可以的话检查下防火墙之类,或者直接看两台电脑之间能不能共享数据。
2、UDP协议传输本来就是不可靠的,发送数据丢包时有发生,看lz每次收不到,应该就不是这个原因。 --------------------编程问答-------------------- mark 一下 , 这个很不错,晚上回家研究一下
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,