基于UDP的服務(wù)器實(shí)現(xiàn)多線程時(shí),第一個(gè)客戶運(yùn)行端不能在服務(wù)器登陸得到響應(yīng),第二個(gè)實(shí)行客戶端,第一次執(zhí)行已停止的客戶端才能接受服務(wù)器的響應(yīng),服務(wù)器也才會(huì)得到第一個(gè)客戶端的信息
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?UDPCilent?{ public?static?void?main(String[]?args)?{ try?{ /* ?*?向服務(wù)器端發(fā)送信息 ?*/ //定義服務(wù)器ip,端口,信息 InetAddress?address=InetAddress.getByName("localhost"); int?port=8000; byte?[]data="用戶名:kuerban;密碼:668858".getBytes(); //建立DatagramPacket DatagramPacket?packet=new?DatagramPacket(data,?0,?data.length,?address,?port); //建立DatagramSocket DatagramSocket?socket=new?DatagramSocket(); socket.send(packet); /* ?*?獲取服務(wù)端發(fā)送信息 ?*/ //建立數(shù)據(jù)包接受信息 byte?bytes[]=new?byte[1024]; DatagramPacket?packet1=new?DatagramPacket(bytes,?bytes.length); socket.receive(packet1); String?info=new?String(bytes,?0,?packet1.getLength()); System.out.println(info); socket.close(); }?catch?(UnknownHostException?|?SocketException?e)?{ e.printStackTrace(); }?catch?(IOException?e)?{ e.printStackTrace(); } } } import?java.io.IOException; import?java.net.DatagramPacket; import?java.net.DatagramSocket; import?java.net.InetAddress; /* ?*?服務(wù)器端,基于UDP實(shí)現(xiàn)用戶登錄 ?*/ public?class?UDPServer?{ public?static?void?main(String[]?args)?{ try?{ /* ?*?接受信息 ?*/ //建立一個(gè)DatagramSocket,指定端口 DatagramSocket?socket=new?DatagramSocket(8000); byte?[]bytes=new?byte[1024]; //建立一個(gè)Datagrampacket,以接受數(shù)據(jù) DatagramPacket?packet=new?DatagramPacket(bytes,?bytes.length); /* ?*?發(fā)送數(shù)據(jù) ?*/ //啟動(dòng)服務(wù)器 System.out.println("服務(wù)器已啟動(dòng)"); while(true){ ????socket.receive(packet); ????//建立客戶端ip,端口 InetAddress?address=packet.getAddress(); int?port=packet.getPort(); UDPthread?thread=new?UDPthread(socket,packet,address,port,bytes); thread.start(); } }?catch?(IOException?e)?{ e.printStackTrace(); } } }
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPthread extends Thread{
DatagramPacket packet=null;
InetAddress address=null;
byte bytes[];
int port=0;
DatagramSocket socket=null;
public UDPthread(DatagramSocket socket,DatagramPacket packet,InetAddress address,int port,byte[] bytes) {
this.packet =packet;
this.address=address;
this.port=port;
this.socket=socket;
this.bytes=bytes;
}
public void run(){
//讀取信息,輸出信息
String info=new String(bytes, 0, packet.getLength());
System.out.println(info);
//建立信息,并發(fā)送
byte bytes1[]="登陸成功".getBytes();
DatagramPacket packet1=new DatagramPacket(bytes1, 0, bytes1.length,address,port);
//向客戶端響應(yīng)
try {
socket.send(packet1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2016-04-26
DatagramPacket packet1=new DatagramPacket(bytes1, 0, bytes1.length,address,port);這里只有4個(gè)參數(shù)吧?第二個(gè)參數(shù)0是什么作用?
2018-05-31
2018-05-31
這里要每次new一個(gè)新的packet,即
2016-11-26
兄弟,我也是這個(gè)問題,你是怎么解決的?
2016-04-26
但你有沒有看出我提出的問題