課程
/后端開發
/Java
/Java Socket應用---通信是這樣練成的
如題,因為packet傳到線程里后不起作用啊,測了下,不為空,但它的方法都用不了啊,有誰知道嗎。老師沒講這個網上查到的資料也很有顯。幕課之前也有人問同樣的問題,但并沒有回答
2016-04-11
源自:Java Socket應用---通信是這樣練成的 4-3
正在回答
public?class?UDPServerThread?extends?Thread?{ DatagramSocket?socket?=?null; DatagramPacket?packet?=?null; public?UDPServerThread(DatagramPacket?packet,DatagramSocket?socket){ this.packet?=?packet; this.socket?=?socket; } 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?packet2?=?new?DatagramPacket(data2,?data2.length,address,?port); try?{ socket.send(packet2); }?catch?(IOException?e)?{ e.printStackTrace(); } } } /* ?*?服務器端,實現基于UDP的用戶登陸 ?*/ public?class?UDPServer?{ public?static?void?main(String[]?args)?throws?IOException?{ //創建服務器端DatagramSocket,指定端口號 DatagramSocket?socket?=?new?DatagramSocket(8800); byte[]?data?=?new?byte[1024];//創建字節數組,指定接收的數據報的大小 int?count=0; System.out.println("*******服務器端已經啟動,等待客戶端發送數據**********"); while(true){ DatagramPacket?packet?=?new?DatagramPacket(data,?data.length); socket.receive(packet); UDPServerThread?serverThread?=?new?UDPServerThread(packet,?socket); serverThread.start(); count++; System.out.println("客戶端的數量是"+count); } } }
moluchase
moluchase 回復 moluchase
Airly 回復 moluchase
Mad_Man_ 回復 moluchase
MEI有頭緒 回復 Airly
MEI有頭緒 回復 Mad_Man_
僅供參考:
public class UdpSocketMilServerDemo {
public static void main(String[] args) {
DatagramSocket socket = null;
try {
/*
* 接受客戶端發送到服務器的數據信息
*/
int count = 0;
//創建DatagramSocket,指定端口
socket = new DatagramSocket(8800);
while(true){
//創建DatagramPacket,用于存儲客戶端發送的信息
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
//接受從客戶端發送來的請求信息,并存儲在DatagramPacket中
socket.receive(packet);
UdpThread thread = new UdpThread(socket, data, packet);
thread.start();
count++;
System.out.println("總共有"+count+"個用戶登錄");
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
}finally{
socket.close();
public class UdpThread extends Thread {
private DatagramSocket socket;
private byte[] data;
private DatagramPacket packet;
public UdpThread(DatagramSocket socket,byte[] data,DatagramPacket packet){
this.socket = socket;
this.data = data;
this.packet = packet;
@Override
public void run() {
//讀取獲取到的客戶信息
String info = new String(data, 0, packet.getLength());
System.out.println("我是服務端,客戶端說:"+info);
/*?
?* 對客戶端的請求進行響應
?*/
?
//獲取客戶端主機信息和定義要響應的信息
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data2 = "歡迎您!".getBytes();
//定義一個DatagramPaket,用戶存放響應信息
DatagramPacket responsePacket = new DatagramPacket(data2, data2.length, address, port);
//發送響應信息
socket.send(responsePacket);
SilenceDean
Airly 回復 SilenceDean
Airly 回復 Airly
我的也不行,運行不出來。有沒有源代碼參考一下
可以發一下源代碼參考一下?
感覺因為現在人數多了還是怎么的,幕課網現在都已經沒老師來回答問題了,以前的時候人發問題總有。唉,現在就只剩些學生互相猜解了。
慕粉1651148
額,我已經找到答案了,udp的datagrampacket接受數據只能用一個線程接收。所以要先接受后將數據提交線程池處理即可
獅子追求真理 提問者 回復 慕粉1651148
慕蘭雪下 回復 獅子追求真理 提問者
Airly 回復 獅子追求真理 提問者
同問!
水止三千
舉報
分享的是 Java 中的網絡編程,使用Socket實現網絡聊天通信
2 回答我在用多線程實現多個udp客戶端的問題
1 回答在使用多線程實現基于UDP的多客戶端與服務端連接時,發現有時候客戶端可能會收不到服務端的回應?
2 回答UDP實現多線程
5 回答求指教:UDP線程接收多客戶端數據
1 回答按照視頻TCP那章的前三節寫的程序,服務器端接受不了客戶端發來的數據?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-08-05
2016-07-06
public class UdpSocketMilServerDemo {
public static void main(String[] args) {
DatagramSocket socket = null;
try {
/*
* 接受客戶端發送到服務器的數據信息
*/
int count = 0;
//創建DatagramSocket,指定端口
socket = new DatagramSocket(8800);
while(true){
//創建DatagramPacket,用于存儲客戶端發送的信息
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
//接受從客戶端發送來的請求信息,并存儲在DatagramPacket中
socket.receive(packet);
UdpThread thread = new UdpThread(socket, data, packet);
thread.start();
count++;
System.out.println("總共有"+count+"個用戶登錄");
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
socket.close();
}
}
}
public class UdpThread extends Thread {
private DatagramSocket socket;
private byte[] data;
private DatagramPacket packet;
public UdpThread(DatagramSocket socket,byte[] data,DatagramPacket packet){
this.socket = socket;
this.data = data;
this.packet = packet;
}
@Override
public void run() {
try {
//讀取獲取到的客戶信息
String info = new String(data, 0, packet.getLength());
System.out.println("我是服務端,客戶端說:"+info);
/*?
?* 對客戶端的請求進行響應
?*/
?
//獲取客戶端主機信息和定義要響應的信息
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data2 = "歡迎您!".getBytes();
//定義一個DatagramPaket,用戶存放響應信息
DatagramPacket responsePacket = new DatagramPacket(data2, data2.length, address, port);
//發送響應信息
socket.send(responsePacket);
} catch (IOException e) {
e.printStackTrace();
}
}
}
2016-06-28
我的也不行,運行不出來。有沒有源代碼參考一下
2016-06-20
可以發一下源代碼參考一下?
2016-04-13
感覺因為現在人數多了還是怎么的,幕課網現在都已經沒老師來回答問題了,以前的時候人發問題總有。唉,現在就只剩些學生互相猜解了。
2016-04-13
額,我已經找到答案了,udp的datagrampacket接受數據只能用一個線程接收。所以要先接受后將數據提交線程池處理即可
2016-04-12
同問!