关于JAVAweb程序,使用JAVA socket实现TCP点对点聊天和UDP群组组播。为什么无法运行呢?思路是通过收到的消息格式判断服务器发送过来的消息,再进行响应,如果服务器发送boradcast,则开始接受组播信息。
while (true) {
try {
String msg = br.readLine();//读取服务器是否发送了消息给该客户端
String[] strs = msg.split("#");
System.out.print(msg+" msg");
//判断是否为服务器发来的登陆信息
if (strs[0].equals("LOGIN")) {
if (!strs[1].equals(nickName)) {//不是本人的上线消息就显示,本人的不显示
jta.append(strs[1] + "已上线\n");
dl.addElement(strs[1]);//DefaultListModel来更改JList的内容
userList.repaint();
}
} else if (strs[0].equals("MSG")) {//接到服务器发送消息的信息
if (!strs[1].equals(nickName)) {//别人说的
jta.append(strs[1] + "说:" + strs[2] + "\n");
} else {
jta.append("我说:" + strs[2] + "\n");
}
} else if (strs[0].equals("USERS")) {//USER消息,为新建立的客户端更新好友列表
dl.addElement(strs[1]);
userList.repaint();
} else if (strs[0].equals("ALL")) {
jta.append("系统消息:" + strs[1] + "\n");
} else if (strs[0].equals("OFFLINE")) {
if (strs[1].equals(nickName)) {//如果是自己下线的消息,说明被服务器端踢出聊天室,强制下线
javax.swing.JOptionPane.showMessageDialog(this, "您已被系统请出聊天室!");
System.exit(0);
}
jta.append(strs[1] + "已下线\n");
dl.removeElement(strs[1]);
userList.repaint();
} else if ((strs[2].equals(nickName) || strs[1].equals(nickName)) && strs[0].equals("SMSG")) {
if (!strs[1].equals(nickName)) {
jTextArea.append(strs[1] + "说:" + strs[3] + "\n");
jta.append("系统提示:" + strs[1] + "私信了你" + "\n");
} else {
jTextArea.append("我说:" + strs[3] + "\n");
}
} else if ((strs[2].equals(nickName) || strs[1].equals(nickName)) && strs[0].equals("FSMSG")) {
sender = strs[1];
receiver = strs[2];
//接收方收到私聊消息,自动弹出私聊窗口
if (!strs[1].equals(nickName)) {
FirstSecret = false;
jTextArea.append(strs[1] + "说:" + strs[3] + "\n");
jta.append("系统提示:" + strs[1] + "私信了你" + "\n");
handleSec(strs[1]);
} else {
jTextArea.append("我说:" + strs[3] + "\n");
}
} else if (strs[0].equals("Broadcast")){
System.out.print(" 666");
try {
MulticastSocket socket = new MulticastSocket(3000);
InetSocketAddress group=new InetSocketAddress("224.0.0.1",3000);
socket.joinGroup(group,null);
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
String[] strss = message.split("#");
if (strss[0].equals("GR1")) {
jTextArea.append("群组1管理员说" + strs[1] + "\n");
}
socket.leaveGroup(group,null);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (Exception ex) {//如果服务器端出现问题,则客户端强制下线
javax.swing.JOptionPane.showMessageDialog(this, "您已被系统请出聊天室!");
System.exit(0);
}
你这代码和问题乱七八糟
1.如果你是个web程序,那应该是http协议才对,怎么是socket实现的tcp侦听,到底是什么
2.你的代码怎么一开始就直接read,connect的代码呢
3.你想同时实现TCP通信和UDP通信,那直接另外开个线程接收UDP就好了,不要搞一堆同步机制
4.想要组播,只能局域网搞,跨路由器不可以组播
各位我愿意有偿悬赏