问答详情
源自:4-3 编程实现基于 UDP 的 Socket 通信之客户端

老师,我想请教一下为什么我用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();
	}

}


提问者:想你的俊 2015-03-17 22:35

个回答

  • JowanXu
    2015-04-13 12:04:40

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

  • 没有马甲线的安琪拉
    2015-03-19 09:31:17

    能描述一下具体问题么