【发布时间】:2015-05-27 11:41:21
【问题描述】:
您好,我是 java 和网络编程的新手...我尝试将两个 UDP 数据包从 (AssignmentChatClient) 发送到服务器 (AssignmentChatServer ),服务器会检查第一个包含(目标IP地址)的数据包,然后将第二个数据包(message)转发到目标 (AssignmentChatClient2)。我有一个问题,目的地(AssignmentChatClient2)没有收到数据包...你们能帮我指出问题出在哪里吗?提前谢谢...
这里是代码
分配聊天服务器
import java.net.*;
import java.io.*;
public class AssignmentChatServer {
public static void main(String args[]) throws IOException {
int sPort = 2222, cPort = 3333;
byte[] buf = null;
byte[] buf2 = null;
System.out.println("Listening to socket port " + sPort);
try (DatagramSocket serverSocket = new DatagramSocket(sPort)) {
while (true) {
buf = new byte[128];
buf2 = new byte [1024];
String addr = "";
String sMsg = "";
char [] tempC = null;
DatagramPacket addrPacket = null;
DatagramPacket msgPacket = null;
addrPacket = new DatagramPacket(buf, buf.length);
serverSocket.receive(addrPacket);
String address = new String(addrPacket.getData()).trim();
System.out.println(address);
tempC = address.toCharArray();
for(int i = 0; i < tempC.length; i++){
if(tempC[i] == '-'){
InetAddress sAddr = InetAddress.getByName(addr);
msgPacket = new DatagramPacket(buf2, buf2.length);
serverSocket.receive(msgPacket);
String msg = new String(msgPacket.getData());
sMsg = msg.trim();
msgPacket = new DatagramPacket(sMsg.getBytes(),sMsg.getBytes().length, sAddr, cPort);
serverSocket.send(msgPacket);
System.out.println(sMsg);
addr = "";
continue;
}
addr += tempC[i];
}
}
}catch(IOException ex){System.out.println(ex);}
}
}
AssignmentChatClient
import java.net.*;
import java.io.*;
public class AssignmentChatClient {
public static void main(String args[]) throws IOException {
int sPort = 2222, cPort = 3333;
byte[] buf = null;
byte[] buf2 = null;
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Please enter server address : ");
String serAddress = input.readLine();
InetAddress sAddr = InetAddress.getByName(serAddress);
System.out.println("Connecting to server socket on port " + sPort);
try (DatagramSocket clientSocket = new DatagramSocket(cPort)) {
while (true) {
buf = new byte[128];
buf2 = new byte [1024];
String temp = "";
String sMsg = "";
String rMsg = "";
DatagramPacket addrPacket = null;
DatagramPacket rlyPacket = null;
DatagramPacket msgPacket = null;
System.out.print("How many the number of users do you want to send to : ");
int nUsers = Integer.parseInt(input.readLine());
byte [] address = new byte [nUsers];
address = null;
System.out.print("Enter message : ");
sMsg = input.readLine();
if(sMsg == null)
return ;
for(int i = 0, j = 0; i < nUsers ; i++){
System.out.print("Please enter address " + ++j + " : ");
temp += input.readLine();
temp += "-";
}
address = temp.getBytes();
addrPacket = new DatagramPacket(address,address.length, sAddr, sPort);
clientSocket.send(addrPacket);
// System.out.println(temp);
msgPacket = new DatagramPacket(sMsg.getBytes(),sMsg.getBytes().length, sAddr, sPort);
clientSocket.send(msgPacket);
// System.out.println(sMsg);
// System.out.println(sAddr.toString());
rlyPacket = new DatagramPacket(buf2, buf2.length);
clientSocket.receive(rlyPacket);
String msg = new String(rlyPacket.getData());
rMsg = msg.trim();
System.out.println(rMsg);
}
}catch(IOException ex){System.out.println(ex);}
}
}
AssignmentChatClient2
import java.net.*;
import java.io.*;
public class AssignmentChatClient2 {
public static void main(String args[]) throws IOException {
int sPort = 2222, cPort = 3333;
byte[] buf = null;
byte[] buf2 = null;
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Please enter server address : ");
String serAddress = input.readLine();
InetAddress sAddr = InetAddress.getByName(serAddress);
System.out.println("Connecting to server socket on port " + sPort);
try (DatagramSocket clientSocket = new DatagramSocket(cPort)) {
while (true) {
buf2 = new byte [1024];
String temp = "";
String replyMsg = "";
String rMsg = "";
DatagramPacket addrPacket = null;
DatagramPacket rcvPacket = null;
DatagramPacket msgPacket = null;
rcvPacket = new DatagramPacket(buf2, buf2.length);
clientSocket.receive(rcvPacket);
String msg = new String(rcvPacket.getData());
rMsg = msg.trim();
System.out.println(rMsg);
InetAddress rAddr = rcvPacket.getAddress();
temp = rAddr.toString();
System.out.print("Enter message : ");
replyMsg = input.readLine();
if(replyMsg == null)
return ;
addrPacket = new DatagramPacket(temp.getBytes(),temp.getBytes().length, sAddr, sPort);
clientSocket.send(addrPacket);
// System.out.println(temp);
msgPacket = new DatagramPacket(replyMsg.getBytes(),replyMsg.getBytes().length, sAddr, sPort);
clientSocket.send(msgPacket);
// System.out.println(replyMsg);
// System.out.println(sAddr.toString());
}
}catch(IOException ex){System.out.println(ex);}
}
}
【问题讨论】:
标签: java sockets networking socket.io network-programming