1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
夜空中最亮的星(翻自 逃跑计划) - 戴羽彤
00:00 / 04:10

夜空中最亮的星 能否听清

那仰望的人 心底的孤独和叹息

夜空中最亮的星 能否记起

那曾与我同行 消失在风里的身影

我祈祷拥有一颗透明的心灵

和会流泪的眼睛

给我再去相信的勇气

越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请指引我靠近你

夜空中最亮的星 是否知道

那曾与我同行的身影 如今在哪里

夜空中最亮的星 是否在意

是等太阳先升起 还是意外先来临

我宁愿所有痛苦都留在心底

也不愿忘记你的眼睛

哦 给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行 哒~

我祈祷拥有一颗透明的心灵

和会流泪的眼睛 哦

给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行

Java实例练习——基于UDP协议的多客户端通信

  昨天学习了UDP协议通信,然后就想着做一个基于UDP的多客户端通信(一对多),但是半天没做出来,今天早上在参考了很多代码以后,修改了自己的代码,然后运行成功,在这里分享以下代码,也说一下自己的认识误区:

  代码如下:

//最核心的部分是在服务器端的线程部分
package net;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpServerThread extends Thread {		
	DatagramSocket socket = null;
	DatagramPacket getPacket = null;	
	byte []msg = null;
	public UdpServerThread(DatagramSocket socket,DatagramPacket getPacket,byte []msg){
		this.socket = socket;
		this.getPacket = getPacket;		
		this.msg = msg;
	}
	public void run(){
		//1、创建DategramSocket,指定端口号							
				
						
				System.out.println("我是服务器,客户端说:"+new String(msg,0,getPacket.getLength()));
				System.out.println("客户端的IP地址:"+getPacket.getAddress());
				
				//服务器向客户端发送响应信息
				byte[] sendMsg = "欢迎您!".getBytes();
				DatagramPacket sendPacket = new DatagramPacket(
						sendMsg, sendMsg.length, getPacket.getAddress(), getPacket.getPort());
				try {
					socket.send(sendPacket);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	}

}
//然后是服务器端
package net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * 基于UDP协议的通信,服务器端
 * @author syskey
 *
 */
public class UdpManyClientServ {	
	
		public static void main(String args[]) throws IOException{
			//1、创建DategramSocket,指定端口号
			int clientCount = 0;
			
			DatagramSocket socket = new DatagramSocket(8800);			
			System.out.println("***服务器正在启动,等待客户端连接***");
			byte[] msg = new byte[1024];
			//2、创建Data个人啊没Packet,用于接收客户端信息
			DatagramPacket getPacket =null;
			
			//2、创建Data个人啊没Packet,用于接收客户端信息
			while(clientCount<10){						
				try {
					getPacket = new DatagramPacket(msg, msg.length);					
					socket.receive(getPacket);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				UdpServerThread udpServerThread =new UdpServerThread(socket,getPacket,msg);
				udpServerThread.start();
				clientCount++;
				System.out.println("客户端数量"+clientCount);
				//System.out.println("客户端的IP地址:"+socket.getInetAddress().getHostAddress());
			//}	
			//socket.close();
			}
		}
	}
//客户端相对简单
package net;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
 * 基于UDP通信的客户端
 * @author syskey
 *
 */

public class UdpClient {
	
	public static void main(String args[]) throws IOException{
		byte[] sMsgbyte = "用户名:sysker;密码:128398908".getBytes();
		InetAddress serverIp = InetAddress.getByName("localhost");
		DatagramPacket packet = new DatagramPacket(sMsgbyte, sMsgbyte.length, serverIp, 8800);
		DatagramSocket socket = null;
		try {
			socket = new DatagramSocket();
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		socket.send(packet);
		
		byte[] getMsg = new byte[1024];
		DatagramPacket getPacket = new DatagramPacket(getMsg, getMsg.length);
		socket.receive(getPacket);
		System.out.println("我是客户端,服务器说:"+new String(getMsg,0,getPacket.getLength()));
		socket.close();
	}
}

  实现UDP协议多客户端通信与TCP/IP协议不同,TCP/IP中和客户端相关就一个通信类(Socket类),但是对UDP协议来说和客户端相关的通信类有两个(DatagramSocket和DatagramPacket),而在多客户端通信中,核心部分就是处理客户端的通信类,所以思路是一样的。但一开始我就套用TCP/IP协议下的多客户端通信,没有认真的分析UDP通信协议的特点,更没有对比TCP/IP协议和UDP协议的区别,所以导致UDP多客户端通信不能实现。

  总结:学习JAVA时,不能生搬硬套,一定分析清楚其中的原理和区别,然后再去开始实践,不能上来就开始干代码。同时,在我们觉得自己已经掌握了某一个知识点时,最好是通过实践来练习一下,哪怕只是把之前你参考别人代码写的程序,重新按照刚才的思路写一遍,收获绝对不小,但前提条件是理解清楚原理,搞清楚思路。

posted @ 2017-02-26 11:03  云中志  阅读(425)  评论(0编辑  收藏  举报