关于UDP做的聊天程序,求助

蓝色蜂 2013-08-06 09:50:05
我想问下为什么不能实现指定ip间的聊天,只能本机发送接受信息,我是菜鸟,有劳了。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class Chat extends Frame {
DatagramSocket dsSend = null;
DatagramSocket dsRecv = null;
DatagramPacket sendPack = null;
DatagramPacket recvPack = null;
TextField tfTextData = new TextField();
TextField tfTextIP = new TextField();
List list = new List(6);
public Chat() throws HeadlessException {
this.launchFrame();
new Thread(new Recv()).start();
}
public void launchFrame() {
setLocation(300, 200);
this.setSize(500, 500);
this.add(list, "Center");
Panel panel = new Panel();
this.add(panel, "South");
panel.setLayout(new BorderLayout());
panel.add(tfTextData, "Center");
panel.add(tfTextIP, "South");
// pack();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dsRecv.close();
System.exit(0);
}
});
tfTextData.addActionListener(new TFListener());
setVisible(true);
}
class TFListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String s = tfTextData.getText().trim();
tfTextData.setText("");
byte[] buf = s.getBytes();
try {
dsSend = new DatagramSocket();
sendPack = new DatagramPacket(buf, 0, buf.length,
InetAddress.getByName(tfTextIP.getText()), 19999);
dsSend.send(sendPack);
} catch (SocketException e1) {
e1.printStackTrace();
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
dsSend.close();
}
}
class Recv implements Runnable {
public void run() {
try {
dsRecv = new DatagramSocket(19999);
byte[] buf = new byte[1024];
recvPack = new DatagramPacket(buf, buf.length);
while (true) {
dsRecv.receive(recvPack);
// System.out.println(new String(recvPack.getData(), 0,
// recvPack.getLength()));
list.add("ip为:"
+ recvPack.getAddress().getHostAddress()
+ " 说: "
+ new String(recvPack.getData(), 0, recvPack
.getLength())+" 该ip的端口: "+recvPack.getPort());
}
} catch (IOException e1) {
if (dsRecv.isClosed() != true) {
e1.printStackTrace();
}
}
}
}
}









public class TestChat {
public static void main(String[] args) {
Chat c = new Chat();
}
}
...全文
117 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,614

社区成员

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

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