課程
/后端開發
/Java
/Java Socket應用---通信是這樣練成的
UDP實現多線程時,發生了錯誤(while怎么設置停止語句,要不然內存會一直飆升)。誰有編寫好的UDP多線程程序?
2016-10-04
源自:Java Socket應用---通信是這樣練成的 5-1
正在回答
package UDPTest;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
?* 服務器端,實現基于UDP的用戶登錄
?*?
?* @author admin
?*/
public class UDPService {
public static void main(String[] args) throws IOException {
/*
* 接受客戶端發送的數據
*/
// 創建服務器端DatagramSocket,并指定端口
DatagramSocket socket = new DatagramSocket(8800);
System.out.println("---服務器即將啟動,等待客戶端連接---");
// 創建數據報,用于接受客戶端發送的數據
// 創建字節數組,用于指定接受的數據包的大小
int count = 0;
while (true) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
// 接受客戶端發送的數據,此方法在接受數據報之前會一直堵塞
socket.receive(packet);
// 創建一個多線程
UDPThread thread = new UDPThread(packet, socket);
// 線程開始
thread.start();
count++;
System.out.println("當前客戶端的數量為:" + count);
// 查看連接的客戶端的地址
System.out.println("當前客戶端的地址為:" + packet.getAddress());
}
package com.imooc;
public class UDPServerThread extends Thread{
DatagramPacket packet;
DatagramSocket socket;
public UDPServerThread(DatagramPacket packet, DatagramSocket socket) {
super();
this.packet = packet;
this.socket = socket;
public void run(){
//讀取數據
byte[] data=packet.getData();
String inf=new String(data,0,packet.getLength());
System.out.println("我是服務器,客戶端說:"+inf);
* 與客戶端響應
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();
小波66 提問者
舉報
分享的是 Java 中的網絡編程,使用Socket實現網絡聊天通信
1 回答UDP多線程
1 回答UDP實現多線程,是不是無法socket.close()?
7 回答【求助】UDP多線程
2 回答我在用多線程實現多個udp客戶端的問題
2 回答UDP為什么要用多線程
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-11-21
package UDPTest;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
?* 服務器端,實現基于UDP的用戶登錄
?*?
?* @author admin
?*?
?*/
public class UDPService {
public static void main(String[] args) throws IOException {
/*
* 接受客戶端發送的數據
*/
// 創建服務器端DatagramSocket,并指定端口
DatagramSocket socket = new DatagramSocket(8800);
System.out.println("---服務器即將啟動,等待客戶端連接---");
// 創建數據報,用于接受客戶端發送的數據
// 創建字節數組,用于指定接受的數據包的大小
int count = 0;
while (true) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
// 接受客戶端發送的數據,此方法在接受數據報之前會一直堵塞
socket.receive(packet);
// 創建一個多線程
UDPThread thread = new UDPThread(packet, socket);
// 線程開始
thread.start();
count++;
System.out.println("當前客戶端的數量為:" + count);
// 查看連接的客戶端的地址
System.out.println("當前客戶端的地址為:" + packet.getAddress());
}
}
}
2016-10-04
package com.imooc;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPServerThread extends Thread{
DatagramPacket packet;
DatagramSocket socket;
public UDPServerThread(DatagramPacket packet, DatagramSocket socket) {
super();
this.packet = packet;
this.socket = socket;
}
public void run(){
//讀取數據
byte[] data=packet.getData();
String inf=new String(data,0,packet.getLength());
System.out.println("我是服務器,客戶端說:"+inf);
/*
* 與客戶端響應
*/
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();
}
}
}