为了账号安全,请及时绑定邮箱和手机立即绑定

老师,我想请教一下为什么我用UDP写出来的多线程会有BUG。内容为server端、serverthread端、client端

package demostrator;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPserver {
	public static void main(String[] args) throws IOException {
		DatagramSocket socket = new DatagramSocket(8888);
		
		byte[] data = new byte[1024];
		DatagramPacket packet = new DatagramPacket(data, data.length);
		
		System.out.println("***Server will be start!***");
		
		while (true) {
			socket.receive(packet);
			
			ServerThread thread = new ServerThread(packet,socket);
			thread.start();
		}

	}
}



package demostrator;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ServerThread extends Thread {
DatagramPacket packet = null;
DatagramSocket socket = null;
ServerThread(DatagramPacket packet,DatagramSocket socket){
this.packet = packet;
this.socket = socket;
}
public void run(){
String info = new String(packet.getData());
//output info from client
System.out.println("i am server,client say: "+info);
InetAddress clientAddress = packet.getAddress();
int port = packet.getPort();
byte[] data1= "Welcome to server!~".getBytes();
DatagramPacket packet1 = new DatagramPacket(data1, data1.length, clientAddress, port);
try {
socket.send(packet1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


package demostrator;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPclient {
	public static void main(String[] args) throws IOException {
		//get InetAddress of server
		InetAddress add = InetAddress.getByName("localhost");
		int port = 8888;
		byte[] info = "usearname:wujun; password:416471".getBytes();
		
		DatagramPacket packet = new DatagramPacket(info,info.length,add,port);
		DatagramSocket socket = new DatagramSocket();
		
		socket.send(packet);
		
		//receive server infomation
		byte[] serverMsg = new byte[1024];
		DatagramPacket packet1 = new DatagramPacket(serverMsg, 0, serverMsg.length);
		socket.receive(packet1);
		
		String strServer = new String(serverMsg);
		System.out.println("Server say:"+strServer);
		socket.close();
	}

}


正在回答

4 回答

把thread.start()改为thread.run()试试

0 回复 有任何疑惑可以回复我~
#1

豌豆娃

run方法就不是多线程了。就只是main线程的一个普通方法而已。如果下面还有一段程序,那么就必须等到run方法运行完,才能运行下面的程序。 start方法才是多线程的。和并行和main线程同时运行。如果下面还有一段程序,start线程会和下面程序并行运行的
2015-04-14 回复 有任何疑惑可以回复我~

能描述一下具体问题么

0 回复 有任何疑惑可以回复我~
#1

想你的俊 提问者

首先运行server端,后运行UDPclient端,这个时候server端并未接受到客户端的数据,与此同时我运行另外一个客户端,这个时候server端会出现响应,另外需要说明的是在完成以上动作之后server应该给到客户端的回应也没有出现。 能不能帮忙解析一下问题出现的原因和提供一下解决的办法?谢谢了。
2015-03-19 回复 有任何疑惑可以回复我~
#2

没有马甲线的安琪拉 回复 想你的俊 提问者

断点跟踪一下,看看有没有相关信息提示?
2015-03-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师,我想请教一下为什么我用UDP写出来的多线程会有BUG。内容为server端、serverthread端、client端

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信