我正在写一个微型聊天程序,准备由一个主类调用两个分管接受信息和发送信息的两个线程。下面是接收数据的线程:
import java.net.*;
import java.io.*;
public class ReadT extends Thread {
public void run() {
try {
DatagramSocket sock=new DatagramSocket(1111);
byte [] ary=new byte[128];
DatagramPacket pack=new DatagramPacket(ary,128);
String word=""; //接收数据前把字符串清空
while(true) {
//接收数据
try {
sock.receive(pack);
word="";
String word=new String(pack.getData());
//这个是判断对方是否输入“bye”,如是则关闭套接字,但是不能成功实现
if(word.equals("bye")){
System.out.println("Your friend has logged off!");
sock.close();
break;
}
System.out.println("From " + pack.getAddress() + " port: " + pack.getPort());
System.out.println(word);
}
catch (IOException e) { System.out.println(e); }
}
}
catch (SocketException e) { System.out.println(e); }
}
}
然后用另外一个程序向这个线程发送数据,比方第一次发送“12345”,第二次发送“ab”,程序输出的却是:
12345
ab345
我在接收数据时也已经将字符串变量word重新赋值为空了。还是这样出错。而且通过判断对方输入决定是否关闭套接字的if语句也没用。
这些应该都是字符串的问题,洗耳恭听高手解答!@!!顺便希望大家对我这个聊天程序的编写方式发表高见!!小弟谢过!!
import java.net.*;
import java.io.*;
public class ReadT extends Thread {
public void run() {
try {
DatagramSocket sock=new DatagramSocket(1111);
byte [] ary=new byte[128];
DatagramPacket pack=new DatagramPacket(ary,128);
String word=""; //接收数据前把字符串清空
while(true) {
//接收数据
try {
sock.receive(pack);
word="";
String word=new String(pack.getData());
//这个是判断对方是否输入“bye”,如是则关闭套接字,但是不能成功实现
if(word.equals("bye")){
System.out.println("Your friend has logged off!");
sock.close();
break;
}
System.out.println("From " + pack.getAddress() + " port: " + pack.getPort());
System.out.println(word);
}
catch (IOException e) { System.out.println(e); }
}
}
catch (SocketException e) { System.out.println(e); }
}
}
然后用另外一个程序向这个线程发送数据,比方第一次发送“12345”,第二次发送“ab”,程序输出的却是:
12345
ab345
我在接收数据时也已经将字符串变量word重新赋值为空了。还是这样出错。而且通过判断对方输入决定是否关闭套接字的if语句也没用。
这些应该都是字符串的问题,洗耳恭听高手解答!@!!顺便希望大家对我这个聊天程序的编写方式发表高见!!小弟谢过!!
需要被清空的不是String的word,而是缓冲区ary.