疯狂java讲义百度网盘

疯狂Java讲义:使用Socket进行通信[2]

程序清单 codes/ / /Client java

public class Client

{

public static void main(String[] args)

throws IOException

{

Socket socket = new Socket( )

//将Socket对应的输入流包装成BufferedReader

BufferedReader br = new BufferedReader(

new InputStreamReader(socket getInputStream()))

//进行普通IO操作

String line = br readLine()

System out println( 来自服务器的数据 + line)

//关闭输入流 socket

br close()

socket close()

}

}

上面程序中粗体字代码是使用ServerSocket和Socket建立网络连接的代码 斜体字代码是通过Socket获取输入流 输出流进行通信的代码 通过程序不难看出 一旦使用ServerSocket Socket建立网络连接之后 程序通过网络通信与普通IO并没有太大的区别

先运行上面程序中的Server类 将看到服务器一直处于等待状态 因为服务器使用了死循环来接受来自客户端的请求 再运行Client类 将可看到程序输出 来自服务器的数据 您好 您收到了服务器的新年祝福! 这表明客户端和服务器端通信成功

上面程序为了突出通过ServerSocket和Socket建立连接 并通过底层IO流进行通信的主题 程序没有进行异常处理 也没有使用finally块来关闭资源

实际应用中 程序可能不想让执行网络连接 读取服务器数据的进程一直阻塞 而是希望当网络连接 读取操作超过合理时间之后 系统自动认为该操作失败 这个合理时间就是超时时长 Socket对象提供了一个setSoTimeout(int timeout)来设置超时时长 如下的代码片段所示

Socket s = new Socket( )

//设置 秒之后即认为超时

s setSoTimeout( )

当我们为Socket对象指定了超时时长之后 如果在使用Socket进行读 写操作完成之前已经超出了该时间限制 那么这些方法就会抛出SocketTimeoutException异常 程序可以对该异常进行捕捉 并进行适当处理 如下代码所示

try

{

//使用Scanner来读取网络输入流中的数据

Scanner scan = new Scanner(s getInputStream())

//读取一行字符

String line = scan nextLine()

}

//捕捉SocketTimeoutException异常

catch(SocketTimeoutException ex)

{

//对异常进行处理

}

假设程序需要为Socket连接服务器时指定超时时长 即经过指定时间后 如果该Socket还未连接到远程服务器 则系统认为该Socket连接超时 但Socket的所有构造器里都没有提供指定超时时长的参数 所以程序应该先创建一个无连接的Socket 再调用Socket的connect()方法来连接远程服务器 而connect方法就可以接受一个超时时长参数 如下代码所示

//创建一个无连接的Socket

Socket s = new Socket()

//让该Socket连接到远程服务器 如果经过 秒还没有连接到 则认为连接超时

s connconnect(new InetAddress(host port) )

       返回目录 疯狂Java讲义

       编辑推荐

       Java程序性能优化 让你的Java程序更快 更稳定

       新手学Java 编程

       Java程序设计培训视频教程

lishixinzhi/Article/program/Java/hx/201311/27265

疯狂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程序设计培训视频教程

lishixinzhi/Article/program/Java/hx/201311/27260

疯狂java讲义百度网盘

疯狂Java讲义:使用ServletSocket创建TCP服务器端

使用ServletSocket创建TCP服务器端

从图 中看上去TCP通信的两个通信实体之间并没有服务器端 客户端之分 但那是两个通信实体已经建立虚拟链路之后的示意图 在两个通信实体没有建立虚拟链路之前 必须有一个通信实体先做出 主动姿态 主动接收来自其他通信实体的连接请求

Java中能接受其他通信实体连接请求的类是ServerSocket ServerSocket对象用于监听来自客户端的Socket连接 如果没有连接 它将一直处于等待状态 ServerSocket包含一个监听来自客户端连接请求的方法

Socket accept() 如果接收到一个客户端Socket的连接请求 该方法将返回一个与客户端Socket对应的Socket(如图 所示每个TCP连接有两个Socket) 否则该方法将一直处于等待状态 线程也被阻塞

为了创建ServerSocket对象 ServerSocket类提供了如下几个构造器

ServerSocket(int port) 用指定的端口port来创建一个ServerSocket 该端口应该是有一个有效的端口整数值 ~

ServerSocket(int port int backlog) 增加一个用来改变连接队列长度的参数backlog

ServerSocket(int port int backlog InetAddress localAddr) 在机器存在多个 IP地址的情况下 允许通过localAddr这个参数来指定将ServerSocket绑定到指定的IP地址

当ServerSocket使用完毕 应使用ServerSocket的close()方法来关闭该ServerSocket 通常情况下 服务器不应该只接受一个客户端请求 而应该不断地接受来自客户端的所有请求 所以Java程序通常会通过循环 不断地调用ServerSocket的accept()方法 如下代码片段所示

//创建一个ServerSocket 用于监听客户端Socket的连接请求

ServerSocket ss = new ServerSocket( )

//采用循环不断接受来自客户端的请求

while (true)

{

//每当接受到客户端Socket的请求 服务器端也对应产生一个Socket

Socket s = ss accept()

//下面就可以使用Socket进行通信了

}

上面程序中创建ServerSocket没有指定IP地址 则该ServerSocket将会绑定到本机默认的IP地址 程序中使用 作为该ServerSocket的端口号 通常推荐使用 以上的端口 主要是为了避免与其他应用程序的通用端口冲突

       返回目录 疯狂Java讲义

       编辑推荐

       Java程序性能优化 让你的Java程序更快 更稳定

       新手学Java 编程

lishixinzhi/Article/program/Java/hx/201311/27266

哪里有关于java的全套视频下载,要比较齐全的java教程

疯狂Java的《疯狂Java讲义》上市,被包括北大在内的大量高校引入作为教材。

疯狂Java的《轻量级Java EE企业应用实战》、《疯狂Ajax讲义》等疯狂Java体系图书上市,疯狂Java日臻完善。《轻量级Java EE企业应用实战》亦被大量高校引入作为教材。

疯狂Java出版《疯狂Java:突破程序员的基本功16课》。该书还被翻译成繁体中文版、引进到台湾地区。

疯狂Java的《疯狂Android讲义》上市,该书创造了Java图书史上“首印20天售罄、每个月重印一次”的空前奇迹。

PS:“疯狂java”官网上的视频学习。“李刚老师视频”、“肖文吉老师视频”“李韩飞老师视频

新手学习JAVA需要从什么学起

从基础开始学,书籍一开始不建议看,因为有很多能知识点都很晦涩难懂,不如视频讲解生动清晰,等有一定基础了在看书也不不迟。

视频教程可以看看动力节点的,虽然是机构的视频但课程知识点很多,很经典但不过时。尤其是基础和项目阶段的课程,我个人感觉是最好的。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月28日 06:32:39
下一篇 2024年3月28日 06:42:54

相关推荐

  • 学习黑客讲义,黑客教学书

    黑客入门教程 成为黑客的基础入门需要学习计算机编程、网络技术、操作系统、加密技术等相关知识。同时,需要具备好奇心、探索精神和解决问题的能力。想成为黑客,需要首先熟练掌握一种或多种编程语言,如Python、Java等。 最常见的加密形式就是各种进入系统的口令,而入侵系统时则需要破解这些口令,即解密。 学习更多的入侵技术 阅读各种教程和入侵领域专家写的电子文档。…

    2024年5月17日
    3400
  • 疯狂java讲义doc,疯狂java讲义第六版pdf下载

    学习JAVA,有什么书籍推荐 初学者《零基础学Java》、《Head first Java》这两本书都是从零基础学习者的角度出发,语言通俗易懂,内容丰富,并且加入了有趣的实例,比较适合初学者。 学java语言可以看《Java从入门到精通》、《Java编程语言》、《高性能MySQL第5版》、《疯狂Java讲义》、《Java编程思想》等书籍,看完书之后最好是和视…

    2024年5月17日
    3600
  • 关于疯狂网络安全知识学习的信息

    手机网络安全常识教育 四是网络安全是相对的而不是绝对的。没有绝对安全,要立足基本国情保安全,避免不计成本追求绝对安全。五是网络安全是共同的而不是孤立的。 新时代,小主人,网络知识要记准。合理用,健康用,网络繁杂要认清。上了网,需谨慎,网上年龄莫当真。网上人,多陌生,改变性别用匿名。对信息,要保密,告诉他人不轻易。向他人,供资料,父母意见很重要。 网络安全教育…

    2024年5月16日
    4400
  • 黑马c语言题库,黑马c语言讲义

    谁知道哪有关于C语言的练习题? 1、c语言刷题网站如下:C语言网 洛谷 C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。 2、大学c语言搜题app。大学c语言搜题app原名叫做菜鸟学C语言是一款非常好用的学习c语言的手机软件 软件功能 选择题:按照考点分类的选择题习题,并有答案解析。错题库:可自…

    2024年5月15日
    3600
  • 李炎恢javascript百度网盘,李炎溪百度

    李炎恢javascript怎么样 如果有其他编程语言基础的话,学起来会好一些。书么倒是很多,比如在cerycd这个网站可以下载到很多适合新手学习的javascript书籍,只要在这个网站搜索一下就可以找到。也有几个不错的教学视频。 比较好的javascript视频教程 1、如果有其他编程语言基础的话,学起来会好一些。书么倒是很多,比如在cerycd这个网站可…

    2024年5月15日
    3200
  • 黑马c语言招聘,黑马程序员c基础讲义

    我有几个小问题关于这个c语言程序.谁能帮我解答下?谢谢了! 1、C语言程序如下:includestdio.h main(){ /*设A,B,C三位新郎的编号分别为3。 2、C char s[6]={”a,b,c,d,e”};逗号也算字符,长度应该为10 A fun1(x,10,(x,10),fun2(y,10,(y,10)));x算一个,10算一个。(x,1…

    2024年5月15日
    4000
  • excel公式操作题,excel公式操作题百度网盘

    excel操作考训练试题附答案 1、答案:A 在Excel 2003中,使用自动套用格式来改变数据透视表报表外观时,应打开的菜单为___。 A:插入 B:格式 C:工具 D:数据 答案:B 1在Excel 2003中,用户要自定义排序次序,需要打开___菜单。 2、答案: 1:边框 Excel 2003中,添加边框、颜色操作中,单元格格式对话框中,如果不选择…

    2024年5月14日
    3600
  • 兄弟连linux百度网盘,兄弟连下载百度云

    兄弟连在哪个平台能看到 1、腾讯视频、爱奇艺视频。根据查询相关公开信息,《兄弟连》授权腾讯视频、爱奇艺播放。 2、PPTV 优酷上都能搜到 兄弟连,10集电视连续剧,描写美国101陆军空降师部队E连的真实故事,他们参与了盟军进攻首日的任务,以及其后整个欧洲的战事。全片是由Stephen Ambrose的畅销书改编而成。 3、近日,观众可以频繁地在中央电视台几…

    2024年5月14日
    3600
  • c语言ppt微盘,c语言课件 百度网盘

    app模版是怎么做的app制作模版 方法步骤:打开电脑中的PPT软件页面,在制作PPT模板前要准备放置在第1张PPT的图片,PPT内页中的图片,LOGO等图片。新建一个PPT文件,此时应显示的是一张空白PPT文件。 不会编程的,可以找在线生成平台做,这是一种模板APP制作方式,傻瓜式操作,动下鼠标搞掂。 按照上面的提示填写APP的名称、简介等信息。3APP图…

    2024年5月12日
    3200
  • javadoc中文版百度云,java全套百度网盘

    怎么将eclipse中的英文版Javadoc换成中文版? 1、打开Eclipse,点击help打开About Eclipse IDE:查看自己电脑下载Eclipse的版本型号。找到版本号后,找到符合的版本,下载语言包。返回Eclipse,再次点击help点击Install New Software。 2、首先打开eclipse,点击打开help中的“Inst…

    2024年5月12日
    2600

发表回复

登录后才能评论



关注微信