1. 鐤镫侸ava璁蹭箟锛氢娇鐢⊿ervletSocket鍒涘缓TCP链嶅姟鍣ㄧ
銆銆 浣跨敤ServletSocket鍒涘缓TCP链嶅姟鍣ㄧ
銆銆浠庡浘 涓鐪嬩笂铡籘CP阃氢俊镄勪袱涓阃氢俊瀹炰綋涔嬮棿骞舵病链夋湇锷″櫒绔 瀹㈡埛绔涔嫔垎 浣嗛偅鏄涓や釜阃氢俊瀹炰綋宸茬粡寤虹珛铏氭嫙阈捐矾涔嫔悗镄勭ず镒忓浘 鍦ㄤ袱涓阃氢俊瀹炰綋娌℃湁寤虹珛铏氭嫙阈捐矾涔嫔墠 蹇呴’链変竴涓阃氢俊瀹炰綋鍏埚仛鍑 涓诲姩濮挎 涓诲姩鎺ユ敹𨱒ヨ嚜鍏朵粬阃氢俊瀹炰綋镄勮繛鎺ヨ锋眰
銆銆java涓鑳芥帴鍙楀叾浠栭氢俊瀹炰綋杩炴帴璇锋眰镄勭被鏄疭erverSocket ServerSocket瀵硅薄鐢ㄤ簬鐩戝惉𨱒ヨ嚜瀹㈡埛绔镄凷ocket杩炴帴 濡傛灉娌℃湁杩炴帴 瀹冨皢涓鐩村勪簬绛夊緟鐘舵 ServerSocket鍖呭惈涓涓鐩戝惉𨱒ヨ嚜瀹㈡埛绔杩炴帴璇锋眰镄勬柟娉
銆銆Socket accept锛堬级 濡傛灉鎺ユ敹鍒颁竴涓瀹㈡埛绔疭ocket镄勮繛鎺ヨ锋眰 璇ユ柟娉曞皢杩斿洖涓涓涓庡㈡埛绔疭ocket瀵瑰簲镄凷ocket锛埚傚浘 镓绀烘疮涓猅CP杩炴帴链変袱涓猄ocket锛 钖﹀垯璇ユ柟娉曞皢涓鐩村勪簬绛夊緟鐘舵 绾跨▼涔熻阒诲
銆銆涓轰简鍒涘缓ServerSocket瀵硅薄 ServerSocket绫绘彁渚涗简濡备笅鍑犱釜鏋勯犲櫒
銆銆ServerSocket锛坕nt port锛 鐢ㄦ寚瀹氱殑绔鍙port𨱒ュ垱寤轰竴涓猄erverSocket 璇ョ鍙e簲璇ユ槸链変竴涓链夋晥镄勭鍙f暣鏁板 ~
銆銆ServerSocket锛坕nt port int backlog锛 澧炲姞涓涓鐢ㄦ潵鏀瑰彉杩炴帴阒熷垪闀垮害镄勫弬鏁痈acklog
銆銆ServerSocket锛坕nt port int backlog InetAddress localAddr锛 鍦ㄦ満鍣ㄥ瓨鍦ㄥ氢釜 IP鍦板潃镄勬儏鍐典笅 鍏佽搁氲繃localAddr杩欎釜鍙傛暟𨱒ユ寚瀹氩皢ServerSocket缁戝畾鍒版寚瀹氱殑IP鍦板潃
銆銆褰揝erverSocket浣跨敤瀹屾瘯 搴斾娇鐢⊿erverSocket镄刢lose锛堬级鏂规硶𨱒ュ叧闂璇ServerSocket 阃氩父𨱍呭喌涓 链嶅姟鍣ㄤ笉搴旇ュ彧鎺ュ弹涓涓瀹㈡埛绔璇锋眰 钥屽簲璇ヤ笉鏂鍦版帴鍙楁潵镊瀹㈡埛绔镄勬墍链夎锋眰 镓浠Java绋嫔簭阃氩父浼氶氲繃寰鐜 涓嶆柇鍦拌皟鐢⊿erverSocket镄刟ccept锛堬级鏂规硶 濡备笅浠g爜鐗囨垫墍绀
銆銆//鍒涘缓涓涓猄erverSocket 鐢ㄤ簬鐩戝惉瀹㈡埛绔疭ocket镄勮繛鎺ヨ锋眰
銆銆ServerSocket ss = new ServerSocket锛 锛
銆銆//閲囩敤寰鐜涓嶆柇鎺ュ弹𨱒ヨ嚜瀹㈡埛绔镄勮锋眰
銆銆while 锛坱rue锛
銆銆{
銆銆//姣忓綋鎺ュ弹鍒板㈡埛绔疭ocket镄勮锋眰 链嶅姟鍣ㄧ涔熷瑰簲浜х敓涓涓猄ocket
銆銆Socket s = ss accept锛堬级
銆銆//涓嬮溃灏卞彲浠ヤ娇鐢⊿ocket杩涜岄氢俊浜
銆銆钬
銆銆}
銆銆涓婇溃绋嫔簭涓鍒涘缓ServerSocket娌℃湁鎸囧畾IP鍦板潃 鍒栾ServerSocket灏嗕细缁戝畾鍒版湰链洪粯璁ょ殑IP鍦板潃 绋嫔簭涓浣跨敤 浣滀负璇ServerSocket镄勭鍙e彿 阃氩父鎺ㄨ崘浣跨敤 浠ヤ笂镄勭鍙 涓昏佹槸涓轰简阆垮厤涓庡叾浠栧簲鐢ㄧ▼搴忕殑阃氱敤绔鍙e啿绐
杩斿洖鐩褰 鐤镫侸ava璁蹭箟
缂栬緫鎺ㄨ崘
Java绋嫔簭镐ц兘浼桦寲 璁╀綘镄凧ava绋嫔簭镟村揩 镟寸ǔ瀹
鏂版坠瀛Java 缂栫▼
lishixin/Article/program/Java/hx/201311/27266
2. 疯狂Java讲义的源码如何导入eclipse运行
Java项目的源代码通过一下四部完成导入到eclipse
1、单击eclipse的file菜单 ,选择 import project from file system
2、在弹出的窗口单击 diretory 按钮 选择Java源代码文件系统所在的目录
3、单击“选择文件夹 ”完成将java源代码导入到eclispe系统
你明白了吗?
3. 疯狂Java讲义:使用DatagramSocket发送、接收数据[2]
程序客户端代码也与此类似 客户端采用循环不断地读取用户键盘输入 每当读到用户输入内容后就将该内容封装成DatagramPacket数据报 再将该数据报发送出去 接着把DatagramSocket中的数据读入接收用的DatagramPacket中(实际上是读入该DatagramPacket所封装的字节数组中) 客旁和户端代码如下
程序清单 codes/ / /UdpClient java
public class UdpClient
{
//定义发送数据报的目的地
public static final int DEST_PORT = ;
public static final String DEST_IP = ;
//定义每个数据报的最大大小为 K
private static final int DATA_LEN = ;
//定义该客户端使用的DatagramSocket
private DatagramSocket socket = null;
//定义接收网络数据的字节数组
byte[] inBuff = new byte[DATA_LEN];
//以指定字节数组创建准拦兄备接受数据的DatagramPacket对象
private DatagramPacket inPacket =
new DatagramPacket(inBuff inBuff length)
//定义一个用于发送的DatagramPacket对象
private DatagramPacket outPacket = null;
public void init()throws IOException
{
try
{
//创建一个客户端DatagramSocket 使用随机端口
socket = new DatagramSocket()
//初始化发送用的DatagramSocket 它包含一个长度为 的字节数组
简启袭outPacket = new DatagramPacket(new byte[ ]
InetAddress getByName(DEST_IP) DEST_PORT)
//创建键盘输入流
Scanner scan = new Scanner(System in)
//不断读取键盘输入
while(scan hasNextLine())
{
//将键盘输入的一行字符串转换字节数组
byte[] buff = scan nextLine() getBytes()
//设置发送用的DatagramPacket里的字节数据
outPacket setData(buff)
//发送数据报
socket send(outPacket)
//读取Socket中的数据 读到的数据放在inPacket所封装的字节数组里
socket receive(inPacket)
System out println(new String(inBuff
inPacket getLength()))
}
}
//使用finally块保证关闭资源
finally
{
if (socket != null)
{
socket close()
}
}
}
public static void main(String[] args)
throws IOException
{
new UdpClient() init()
}
}
上面程序的粗体字代码同样也是通过DatagramSocket发送 接收DatagramPacket的关键代码 这些代码与服务器的代码基本相似 而客户端与服务器端的唯一区别在于 服务器所在IP地址 端口是固定的 所以客户端可以直接将该数据报发送给服务器 而服务器则需要根据接收到的数据报来决定将 反馈 数据报的目的地
读者可能会发现 使用DatagramSocket进行网络通信时 服务器端无须 也无法保存每个客户端的状态 客户端把数据报发送到服务器后 完全有可能立即退出 但不管客户端是否退出 服务器无法知道客户端的状态
当使用UDP协议时 如果想让一个客户端发送的聊天信息可被转发到其他所有客户端则比较困难 可以考虑在服务器使用Set来保存所有客户端信息 每当接收到一个客户端的数据报之后 程序检查该数据报的源SocketAddress是否在Set集合中 如果不在就将该SocketAddress添加到该Set集合中 但这样一来又涉及一个问题 可能有些客户端发送一个数据报之后永久性地退出了程序 但服务器端还将该客户端的SocketAddress保存在Set集合中……总之 这种方式需要处理的问题比较多 编程比较烦琐 幸好Java为UDP协议提供了MulticastSocket类 通过该类可以轻松实现多点广播
返回目录 疯狂Java讲义
编辑推荐
Java程序性能优化 让你的Java程序更快 更稳定
新手学Java 编程
Java程序设计培训视频教程
lishixin/Article/program/Java/hx/201311/27260
4. 谁有那个疯狂Android讲义第四版啊
Java4Android(Mars老师)网络网盘免费资源在线学习
链接: https://pan..com/s/1_mGoGaL7O6mpTc48nhVLqA
Java4Android(Mars老师) 53_综合练习(四)_src.zip 53_综合练习(四).mp4 52_综合练习(三).mp4 51_综合练习(二)_src.zip 51_综合练习(二).mp4 50_综合练习(一).mp4 49_开发工具之Eclipse(四).mp4 48_开发工具之Eclipse(三).mp4 47_开发工具之Eclipse(二).mp4 46_开发工具之Eclipse(一).mp4 45_hashCode()与toString().mp4 44_equals函数的作用.mp4 43_类集框架(三).mp4 42_类集框架(二).mp4