package?pers.Sockets;
import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
import?java.net.Socket;
//?UDP服務器線程處理累
?
public?class?UDPServerThread?extends?Thread?{
DatagramPacket?packet=null;
DatagramSocket?socket=null;
byte[]?data=null;
public?UDPServerThread(DatagramPacket?packet,DatagramSocket?socket,byte[]?data){
this.packet=packet;
this.socket=socket;
this.data=data;
}
//線程執行操作,響應客戶端的請求
public?void?run(){
try?{
DatagramPacket??packet2=new?DatagramPacket("歡迎您!".getBytes(),?"歡迎您!".getBytes().length,?packet.getAddress(),packet.getPort());;
//4.讀取數據
String?info=new?String(data,0,packet.getLength());
System.out.println("我是服務器,客戶端說:"+info);
///****??????????向客戶端做出響應沒有實現,仍存在問題?????????****/
/*
?*?向客戶端做出響應
?*/
//2.創建數據報、包含響應的數據信息
/*????packet2????*/
//3.響應客戶端
System.out.println("已響應客戶端!"+UDPServerT.count);
socket.send(packet2);
// //4.關閉資源
// socket.close();
}?catch?(IOException?e)?{
//?TODO?自動生成的?catch?塊
e.printStackTrace();
}
}
}
2015-04-08
package?com.imooc.socket.UDP; //這個是Server?服務器main的地方 import?java.io.IOException; import?java.net.DatagramPacket; import?java.net.DatagramSocket; import?java.net.InetAddress; /** ?*?Created?with?IntelliJ?IDEA. ?*?User:?QiuShiLe ?*?Date:?2015/4/8 ?*?Time:?17:11 ?*?Project:?coreJava ?*?Detail:實現基于UDP的用戶登錄 ?*/ public?class?Server?{ ????public?static?void?main(String[]?args)?throws?IOException?{ ????????DatagramSocket?socket?=?new?DatagramSocket(8888); ????????byte[]?data?=?new?byte[1024]; ????????DatagramPacket?packet; ????????packet?=?new?DatagramPacket(data,?data.length); ????????System.out.println("服務器已啟動"); ????????while?(true){ ????????????socket.receive(packet);//在接收到數據包之前一直阻塞 ????????????ServerThread?thread?=?new?ServerThread(socket,?packet); ????????????thread.run(); ????????} ????} }package?com.imooc.socket.UDP; //這是服務器處理請求的子線程 import?java.io.IOException; import?java.net.DatagramPacket; import?java.net.DatagramSocket; import?java.net.InetAddress; /** ?*?Created?with?IntelliJ?IDEA. ?*?User:?QiuShiLe ?*?Date:?2015/4/8 ?*?Time:?17:35 ?*?Project:?coreJava ?*?Detail:Server的線程實現 ?*/ public?class?ServerThread?implements?Runnable?{ ????private?DatagramSocket?socket; ????private?DatagramPacket?packet; ????public?ServerThread(DatagramSocket?socket,?DatagramPacket?packet)?{ ????????this.socket?=?socket; ????????this.packet?=?packet; ????} ????@Override ????public?void?run()?{ ????????byte[]?data?=?packet.getData(); ????????String?info?=?new?String?(data,?0,?packet.getLength()); ????????System.out.println("我是服務器,客戶端說:"?+?info); ????????InetAddress?address?=?packet.getAddress(); ????????int?port?=?packet.getPort(); ????????byte[]?data2?=?"歡迎您!".getBytes(); ????????DatagramPacket?reply?=?new?DatagramPacket(data2,?data2.length,?address,?port); ????????try?{ ????????????socket.send(reply); ????????}?catch?(IOException?e)?{ ????????????e.printStackTrace(); ????????} ????} }2015-03-27
package demostrator;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
public class UDPserver {
public static void main(String[] args) throws IOException {
InetSocketAddress sd = new InetSocketAddress("localhost", 8888);
DatagramSocket socket = new DatagramSocket(sd);
System.out.println("***Server will be start!***");
while (true) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet);
ServerThread thread = new ServerThread(packet,socket);
new Thread(thread).start();
}
}
}
package demostrator;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
class ServerThread implements Runnable{
private DatagramPacket packet = null;
private DatagramSocket socket = null;
ServerThread(DatagramPacket packet,DatagramSocket socket){
this.packet = packet;
this.socket = socket;
}
@Override
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();
}
}
}
/*public class ServerThread extends Thread {
private DatagramPacket packet = null;
private 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();
}
socket.close();
}
}*/
2015-03-20
為什么第一次客戶端運行得不到服務器回復,只有之后的能得到回復,但是得到的回復貌似也有問題。。