100分求解,为什么客户端之间UDP不能互相发送数据

sonyisme 2003-05-16 07:42:19
服务器端已经和客户端能够成功通信,但客户端之间发送UDP数据的时候为何不行:
简略程序如下:

public class A implements Runnable{
//实现发送UDP数据的函数
public void send(usrname){
.....
String s="ONLINE"+usrname;//online做为关键字
for(int i=0;i<onlineips.size();i++){//从客户端得到的在线用户IP
String ips=onlineips.get(i).toString().trim();
sendPacket=new DatagramPacket(data,s.length(),
InetAddress.getByName(ips),sendPort);
sendSocket.send(sendPacket);
}
public void run(){//run函数实现监听
receivePacket=new DatagramPacket(array,array.length);
receiveSocket.receive(receivePacket);
byte[] data=receivePacket.getData();
String received=new String(data,0,data.length);
if(received.substring(0,6).equals("ONLINE")){//测试是否发送成功
System.out.println("Received information from others");

}
public void MainWin(...){
........
Thread thread=new thread(this);
thread.start();
A.send("client");
}

}
====================================================
大致上简单的就是这样,大家帮忙看看问题出在哪里?谢谢
...全文
66 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sonyisme 2003-05-18
  • 打赏
  • 举报
回复
唉,我也发现了,呵呵
sonyisme 2003-05-17
  • 打赏
  • 举报
回复
创建DatagramSocket是这样的
DatagramPacket sendPacket,receivePacket;
DatagramSocket sendSocket,receiveSocket;
int udpPORT=8001;
int sendPort=8000;
try{
sendSocket=new DatagramSocket();
receiveSocket=new DatagramSocket(udpPORT);
System.out.println("udp ok");
}catch(SocketException se){se.printStackTrace();System.out.println("false udp");}
显示是udpok,就是说已经创建成功了
xueshengjia 2003-05-17
  • 打赏
  • 举报
回复
这个程序错误在send()函数
sendPacket=new DatagramPacket(data,s.length(),
InetAddress.getByName(IP),sendPort)
中sendPort应为udpPORT,你把要发的数据包中的目的端口搞错了,接收端口当然收不到已发送的包了。
mercury1231 2003-05-17
  • 打赏
  • 举报
回复
你的信息不够完全,把创建DatagramSocket那部分也贴出来。
sonyisme 2003-05-17
  • 打赏
  • 举报
回复
public void run(){//run函数实现监听
while(true){
try{
for(int x=0;x<512;x++)
array[x]=' ';
receivePacket=new DatagramPacket(array,array.length);
receiveSocket.receive(receivePacket);
byte[] data=receivePacket.getData();
String received=new String(data,0,data.length);
if(received.substring(0,6).equals("ONLINE")){//测试是否接受到
System.out.println("Received information from others");

}
}catch(IOException e1){System.out.println("CANNOT Connect to Server7");}
}
}
public void MainWin(){
Create();
Thread thread=new Thread(this);
thread.start();
send("client");
System.out.println("send() started!");
}

public static void main(String[] args){
ECTryUDP udp=new ECTryUDP();
udp.MainWin();
}
}
大家帮忙看看吧,多谢了!!
sonyisme 2003-05-17
  • 打赏
  • 举报
回复
我把完整的程序贴出来,大家帮忙看看
太长了,分两部分
import java.net.*;
import java.io.*;
import java.util.*;

public class ECTryUDP implements Runnable{
DatagramPacket sendPacket,receivePacket;
DatagramSocket sendSocket,receiveSocket;
int udpPORT=8001;
int sendPort=8000;

String IP="218.109....";//自己的IP
byte array[]=new byte[512];
Thread thread;

public void Create(){
try{
sendSocket=new DatagramSocket(sendPort);
receiveSocket=new DatagramSocket(udpPORT);
System.out.println("udp ok");
}catch(SocketException se){se.printStackTrace();
System.out.println("false udp");}
}

public void send(String usrname){
try{
String s="ONLINE"+usrname;
byte[] data=s.getBytes();
sendPacket=new DatagramPacket(data,s.length(),
InetAddress.getByName(IP),sendPort);
sendSocket.send(sendPacket);
}
catch(IOException e1){System.out.println("CANNOT Connect to Server1");}
}
andytu 2003-05-17
  • 打赏
  • 举报
回复
可能是你的接收端和发送端端口有冲突,试改一下端寇号,使这两个端口不一样
sonyisme 2003-05-16
  • 打赏
  • 举报
回复
希望是客户端之间互相传递数据
sonyisme 2003-05-16
  • 打赏
  • 举报
回复
是通过服务器通讯的,而且也已经得到对方的ip
newman0708 2003-05-16
  • 打赏
  • 举报
回复
先不说你的程序代码。

if(你的客户之间是通过服务器才通讯的){
应该没有什么问题
}
else if(直接通讯的){
你要先把对方的ip得到后才可以进行通讯。
}
sonyisme 2003-05-16
  • 打赏
  • 举报
回复
啊?不会吧.其实我这个send是放在actionPerformed()里面的,
要事件触发才会发送的
CyberH 2003-05-16
  • 打赏
  • 举报
回复
把send("client");放在run里面看看吧~~~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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