使用非阻塞ServerSocketChannel、SocketChannel代替ServerSocket和Socket



使用非阻塞ServerSocketChannel、SocketChannel代替ServerSocket和Socket

在使用传统的ServerSocket和Socket的时候 很多时候程序是会阻塞的

比如 serversocket.accept() , socket.getInputStream().read() 的时候都会阻塞 accept()方法除非等到客户端socket的连接或者被异常中断 否则会一直等待下去

read()方法也是如此 除非在输入流中有了足够的数据 否则该方法也会一直等待下去知道数据的到来.在ServerSocket与Socket的方式中 服务器端往往要为[......]

Read more

Java网络编程——使用NIO实现非阻塞Socket通信



转自:https://blog.csdn.net/yanmei_yao/article/details/8586199

除了普通的Socket与ServerSocket实现的阻塞式通信外,java提供了非阻塞式通信的NIO API。先看一下NIO的实现原理。

 

从图中可以看出,服务器上所有Channel(包括ServerSocketChannel和SocketChannel)都需要向Selector注册,而该Selector则负责监视这些Socket的IO状态,当其中任意一个或者多个Channel具有可用的IO操作时,该Selector的select()方[......]

Read more

java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

Socket类
Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket(String host, int port) 
创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程地址上的指定远程端口。
Socket(St[......]

Read more

服务端非阻塞式通信(Java Server Socket Channel)

服务端非阻塞式通信(Java Server Socket Channel)

这是我调试了一天的代码,出现很多问题,报了很多错,最后才调试通过。我看网上给的一些例子,都有问题,要不就是太简单(现实中设计的通信协议是不会那么简单的)。请大家放到Eclipse里面运行一下看看吧,希望对大家有帮助。

本示例中实现了一个通信协议:访客端向座席端发送数据,以BYTE_BUFFER_CAPACITY为块大小发送数据。每个块的前8个字节(一个long型)代表块内实际包含的有效字节数,之后的字节都是潜在的有效字节数。当long型指定的有效字节数不足BYTE_BUFFER_CAPACITY-8时,认为本次[......]

Read more

浅谈java中的ServerSocket和Socket的通信原理实现聊天及多人聊天

浅谈java中的ServerSocket和Socket的通信原理实现聊天及多人聊天https://blog.csdn.net/weixin_39214481/article/details/80261781

聊天,QQ,微信,陌陌很多的即时通讯的软件,不管是桌面端还是移动端,在当今社交的时代都是不可或缺的一部分。这时候说Socket和ServerSocket感觉有点老调重弹感觉,相信很多人早就知道如何使用了,而且利用这个通信原理可能已经开发出很多优秀的通信软件吧,但是我感觉这个对于刚接触java网络编程的人来说,学会Socket通信实现聊天软件,是必须的一步,了解其中的原理更是非常重要的一步[......]

Read more

Socket,Thread,多线程Socket

Socket,Thread,多线程Socket

1.Socket
Java的服务端和客户端编写都非常简单,创建服务端使用的是ServerSocket的,然后使用accept()的方法进行监听,并返回一个Socket的对象。客户端的话直接使用Socket类进行连接服务端。连接就这么简单。但我个人觉得难点在于传输信息上,Java本来封装好了很多输入输出流来方便程序员调用,但它的类的初始化中在嵌套各类的方法就觉得恶心了,对于初学者很难马上掌握。而我是这样理解的,Socket下我们通过getInputStream()方法来获得信息,通过getOutputSteram()方法来发送信息。

&n[......]

Read more

浅谈java中的ServerSocket和Socket的通信原理实现聊天及多人聊天

浅谈java中的ServerSocket和Socket的通信原理实现聊天及多人聊天

https://blog.csdn.net/weixin_39214481/article/details/80261781

https://blog.csdn.net/colorsofwing/article/details/80714192

https://blog.csdn.net/qq_34740590/article/details/79700162

https://www.cnblogs.com/37sky/articles/5224979.html

聊天,QQ,微信,陌陌很多的即[......]

Read more

java Socket和ServerSocket多线程编程

java Socket和ServerSocket多线程编程

这是在一本java教材上看到的,做了点修改。具体本教材记不清楚了,Sorry.放在这里,只是让自己需要的时候能够容易找到。

程序分两部分,服务端和客户端。先把服务端运行起来,在运行客户端。整个过程就是客户端想服务端发送String,服务端再返回。客户端的String由键盘输入得到。

服务器端。

Java代码  收藏代码
  1. package net.tcp;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import jav[......]

Read more

java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

Socket类
Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket(String host, int port) 
创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程地址上的指定远程端口。
Socket(St[......]

Read more

Java Socket编程基础及深入讲解

Java Socket编程基础及深入讲解

Socket是Java网络编程的基础,了解还是有好处的,

这篇文章主要讲解Socket的基础编程。Socket用在哪呢,主要用在进程间,网络间通信。本篇比较长,特别做了个目录:

一、Socket通信基本示例

二、消息通信优化

三、服务端优化

    [......]

Read more