【发布时间】:2015-07-29 02:04:38
【问题描述】:
我是java network programming 的新手。
我尝试通过 UDP 发送多个名为 Packet 的 object 实例。
发件人:将 String 更改为 charArray,然后将每个 char 发送到 object。
Receiver:接收Datagrampacket和readObject,然后打印出来。
发送者没问题,但接收者只取对象的第一个实例,并打印它与 charArray 长度一样多的次数。这是我的代码:
接收器
public class Receiver {
public static void main(String args[]) throws Exception
{
DatagramSocket rcvSocket;
DatagramPacket rcvPacket;
ByteArrayInputStream bis;
ObjectInputStream ois;
byte[] rcvData;
Packet SnWPacket;
rcvSocket = new DatagramSocket(7777);
rcvData = new byte[1024];
rcvPacket = new DatagramPacket(rcvData, rcvData.length);
while(true)
{
rcvSocket.receive(rcvPacket);
byte[] in = rcvPacket.getData();
bis = new ByteArrayInputStream(in);
ois = new ObjectInputStream(bis);
SnWPacket = (Packet) ois.readObject();
System.out.println("RECIEVED: " + SnWPacket);
ois.close();
bis.close();
}
}
}
发件人
public class Sender {
public static void main(String args[]) throws Exception
{
DatagramPacket sndPacket;
DatagramSocket sndSocket;
ByteArrayOutputStream bos;
ObjectOutputStream oos;
InetAddress addr;
Scanner sc;
char[] charArray;
int seqNo = 0;
byte sndData[];
Packet SnWPacket;
addr = InetAddress.getByName("localhost");
sndSocket = new DatagramSocket();
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
sc = new Scanner(System.in);
System.out.println("Input: ");
String in = sc.nextLine();
charArray = in.toCharArray();
for (int i = 0; i < charArray.length; i++) {
SnWPacket = new Packet("data", seqNo, charArray[i]);
oos.writeObject(SnWPacket);
oos.flush();
sndData = bos.toByteArray();
bos.flush();
sndPacket = new DatagramPacket(sndData, sndData.length, addr, 7777);
sndSocket.send(sndPacket);
System.out.println("SENT: " + SnWPacket);
seqNo += 1;
}
oos.close();
bos.close();
sndSocket.close();
}
}
数据包
public class Packet implements Serializable{
private String type;
private int seqNo;
private char data;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getSeqNo() {
return seqNo;
}
public void setSeqNo(int seqNo) {
this.seqNo = seqNo;
}
public char getData() {
return data;
}
public void setData(char data) {
this.data = data;
}
public Packet(String type, int seqNo, char data)
{
this.type = type;
this.seqNo = seqNo;
this.data = data;
}
public Packet()
{
this.type = "";
this.seqNo = 0;
this.data = ' ';
}
@Override
public String toString() {
return "Packet: \tType: " + this.type + "\tseqNo: " + this.seqNo + "\tdata: " + this.data;
}
}
假设我发送:“abc”
发件人:
SENT: Packet: Type: data seqNo: 0 data: a
SENT: Packet: Type: data seqNo: 1 data: b
SENT: Packet: Type: data seqNo: 2 data: c
接收者:
RECIEVED: Packet: Type: data seqNo: 0 data: a
RECIEVED: Packet: Type: data seqNo: 0 data: a
RECIEVED: Packet: Type: data seqNo: 0 data: a
问题是接收者打印了三个“a”。请帮我弄清楚。谢谢!
【问题讨论】:
标签: java object network-programming udp