老師,我寫了UDP的多線程實現(xiàn),但是拋出了很多異常,不知道怎么解決~
//這是UdpThread類
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpThread extends Thread{
DatagramSocket socket=null;
DatagramPacket packet=null;
byte[] data=new byte[1024];
public UdpThread(DatagramSocket socket,DatagramPacket packet,byte[] data){
this.socket=socket;
this.packet=packet;
this.data=data;
}
public void run(){
DatagramPacket packet=new DatagramPacket(data, data.length);
String info=new String(data, 0, packet.getLength());
System.out.println("I'm the Server,The Client said:"+info);
InetAddress address=packet.getAddress();
int port =packet.getPort();
byte[] data2="Welcome!!".getBytes();
DatagramPacket packet2=new DatagramPacket(data2, data2.length, address, port);
try {
socket.send(packet2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket.close();
}
}
//這是UdpServer類
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UdpServer {
public static void main(String[] args) throws IOException {
DatagramSocket socket=new DatagramSocket(8080);//實例化DatagramSocket,指定8080端口
byte[] data=new byte[1024];
DatagramPacket packet=new DatagramPacket(data, data.length);
System.out.println("服務器已經(jīng)啟動");
int count=0;
while(true){
socket.receive(packet);
UdpThread thread=new UdpThread(socket,packet,data);
thread.start();
count++;
System.out.println("當前連接的客服端有:"+count+"個。");
}
}
}
//這是UdpClient類
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UdpClient {
public static void main(String[] args) throws IOException {
InetAddress address=InetAddress.getByName("localhost");
int port=8080;
byte[] data="username:admikn;password:orange".getBytes();//創(chuàng)建地址,端口,字節(jié)
DatagramPacket packet=new DatagramPacket(data, data.length, address, port);//實例化DatagramPacket
DatagramSocket socket=new DatagramSocket();//實例化DatagramSocket
socket.send(packet);//發(fā)送數(shù)據(jù)報
byte[] data2=new byte[1024];
DatagramPacket packet2=new DatagramPacket(data2,data2.length);
socket.receive(packet2);
String reply=new String(data2, 0, packet2.getLength());
System.out.println("The server said:"+reply);
socket.close();
}
}
2015-02-10
把異常信息貼下呢
2016-06-22
吧thread類里面的socket.close()刪掉
2015-09-30
和我一樣的問題……請問您解決了沒有?似乎是packet傳到線程里的時候就是null了