当前位置:主页 > java教程 > java实现socket连接技巧

java实现socket连接方法封装详解

发布:2019-07-04 11:32:52 374


给大家整理一篇相关的编程文章,网友姜叶丰根据主题投稿了本篇教程内容,涉及到java、socket、连接方法、封装、java实现socket连接技巧相关内容,已被551网友关注,涉猎到的知识点内容可以在下方电子书获得。

java实现socket连接技巧

Socket通信几乎无时不在, 当然能够搜集到的信息也大量存在, 为了避免重复的劳作, 抽取了关于客户端和服务端的Socket, 并将其应用到适合JVM(LInux/Windows)或者DVM(Android)平台.  这个封装好的API具有以下优势:

1. 满足具有Socket客户端需求的基本应用.

2. 满足具有Socket服务端的基本应用. 具备并发能力, 能满足可设定个数客户端连接.

本文的目的就是为了对Socket做一个封装, 方便客户端和服务端能直接使用Socket.

封装好的API可以从下面的链接获取

Java Socket的封装

其中src/中的是API源码; usage/目录是使用例程

1客户端Socket API

要点:

1.客户端和指定的服务端相连, 因此客户端需要指明服务端对应的IP地址和端口号

2.需要设置超时返回

3. 需要设置循环等待, 因为基本的Socket通信都是一来一回, 这种来回是通过阻塞来完成的。

4.每个客户端连入服务端的时候, 都具备本身的ID, 类似于HTTP的Session, 这点容易被忽视。在多客户端连接中, 可以重点关注。本文提供的代码也有所提及, 但没有深入, 这点留给读者进一步发掘。

代码参照/usage目录下的客户端测试代码, 注意, 先启动服务端,或者你拿着NetAssis 来测试也不错.

2 服务端Socket API

要点:

1.服务端一般是被多个客户端连接的, 并且这些连接要求服务端做相似的处理, 因此这里就将这些相似处理, 抽象成一个SingleTask.java 接口, 具体的业务只需要实现这样的接口, 就可以并行的处理这些Task.

2.不能无限制的让客户端连入Server,  因此需要设置上限值

3.启动线程池, 每个线程针对一个具体的客户端连接

4.注意接收阻塞位置, 需要设置死循环, 读不到数据将死守着等待(但别耽误其它线程处理事情)

5.注意服务端要在死循环中侦听, 这样保证不错过任何来自客户端的请求。

代码参照:/usage目录下的Server端测试代码。

代码中注释很多,因此这里就不详细述说。

常见问题:

1. 客户端Client的时候, 如果存在网络问题, 为了避免网络问题,造成客户端长时间等待, 此时要设置一个TimeOut 

clientSocket = new Socket();
 //这个TimeOut是连接等待时间
clientSocket.connect(tcpAddress, timeOut);

2. 当客户端已经连接, 每次收到一个数据, 客户端将启动处理, 假如服务器长久不发数据, 此时客户端会阻塞等待, 为了避免这个时候的等待, 可以设置一个超时

clientSocket.setSoTimeout(timeOut);

 


参考资料

相关文章

  • java中死锁问题的实例

    发布:2021-05-06

    这篇文章主要介绍了java 中死锁问题的实例详解的相关资料,希望通过本文大家能够理解掌握死锁的问题,需要的朋友可以参考下


  • Java线程安全中的原子性浅析

    发布:2023-03-27

    这篇文章主要介绍了Java线程安全中的原子性,原子性是指一条线程在执行一系列程序指令操作时,该线程不可中断。一旦出现中断,那么就可能会导致程序执行前后的结果不一致


  • Java程序包不存在的3种解决方法总结

    发布:2023-03-13

    包存在的,但是启动项目的时候提示包不存在,所以解决下,这篇文章主要给大家介绍了关于Java程序包不存在的3种解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下


  • Java调用第三方接口封装实现

    发布:2023-04-02

    本文主要介绍了Java调用第三方接口封装实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • java中数组插入与删除指定元素的方法及实例分享

    发布:2019-06-04

    下面小编就为大家分享一篇JAVA中数组插入与删除指定元素的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • Java StringBuffer与StringBuilder有什么区别

    发布:2023-04-25

    当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder类,和String类不同的是,StringBuffer和 StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象,本篇我们来分析分析它们的区别


  • 详解Java中Integer.valueOf,parsetInt() String.valueOf的结果区别

    发布:2019-06-07

    本文通过代码给大家讲解了JAVA中Integer.valueOf, parsetInt() String.valueOf的区别和结果,需要的朋友可以参考下


  • java递归与非递归实现扫描文件夹下文件的实例代码

    发布:2020-05-01

    这篇文章主要为大家详细介绍了java递归与非递归实现扫描文件夹下所有文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


网友讨论