最近一直在看Socket,将自己的所学的记录一下。
TCP/TP
不详细涉及,网络上有充足的信息,可以参考
http://baike.baidu.com/view/7729.htm。我说熟知的便是TCP/UDP属于传输层,而IP属于网络层。而IP提供了TCP/UDP网络传输的底层机制。
TCP提供检测和恢复IP层中通道可能造成的数据丢失以及其他错误。它的通道是基于byte-stream的,但是这个特点可能会造成报文接收不能与发送发一致,稍后谈这个问题。
UDP不对传输造成的错误进行修复,使用它时需要考虑处理这些问题。
Traditional Socket
再没有nio之前,一般使用blocking的方式编程。为了提高并发性,一般使用thrad-per-request的方式。
ss = new ServerSocket(10000);
while (true)
{
socket = ss.accept();
new Thread(new handle(socket)).start();//将处理丢给worker thread
}
当然这也有个问题,OS所能创建的thread是有限的,肯定不能无限制的创建,否则的话性能可能会不升反降。所以,可以采用thread pool的方式。1.5提供了很好的并发类库,所以可以将其修改为,
ArrayBlockingQueue workQueue = new ArrayBlockingQueue<Runnable>(20);
ThreadPoolExecutor excutor = new ThreadPoolExecutor(
20,
20,
60,
TimeUnit.SECONDS,
workQueue);
ss = new ServerSocket(10000);
while (true)
{
socket = ss.accept();
// new Thread(new handle(socket)).start();
excutor.execute(new handle(socket)); //handle by thread pool
}
TCP Stream
解释一下上面提到的“报文接收不能与发送发一致”。这个问题很容易模拟出来,举个例子,
引用
发送 1,2,3
引用
但是收到的却是 12,3
看了一些资料,果然有本书提到这个问题,大意是,
引用
若使用TCP,则不能假设在写入的输入流与输出流之间有任何联系。
实际表现就是一个read()可能会获得多次write()的值。这个应该是取决于read()时使用的buffer的大小以及write()的时机。
关于这点我认为只需要keep in mind即可,呵呵
。NIO在看,改天再录,最近一直在找关于NIO的长连接写法,教程和网上基本都是短连接的。
分享到:
相关推荐
Java应用Socket通讯一对多: ⑴、一对多; ⑵、通过list/map存储连接的socket对象,服务端向所有客户端群发消息,可以修改为服务端向指定客户端发送消息; ⑶、自动定时扫描客户端,移除断开的连接。
在主线程中通过控制台读取键盘...服务器在收到一个socket连接之后,把该socket保存到队列中,并对队列中的每个socket开启各自的读写线程。测试可以在不同控制台运行server和client,服务器接收消息时,会显示消息来源
Java Socket是Java编程语言中用于网络通信的核心API,它提供了低级别的、面向连接的、基于TCP/IP协议的网络通信能力。在"Java Socket 视频流转发Socket"这个主题中,我们将深入探讨如何使用Java Socket来处理视频流...
Java Socket是Java编程语言中实现网络通信的基础组件,它提供了应用程序与网络协议的接口,使得开发者可以构建基于TCP(传输控制协议)或UDP(用户数据报协议)的应用程序。本教程将深入探讨Java Socket编程的核心...
Java Socket 是一种网络通信协议,它是Java编程语言中实现客户端-服务器模型的基础。Socket 提供了低级别的、面向连接的、双向通信的网络接口,允许应用程序通过网络进行数据传输。在本示例中,我们将深入探讨Java ...
Java Socket 连接池实现是提高网络应用性能和效率的关键技术之一。在高并发的网络环境中,频繁地创建和销毁Socket连接会导致大量的系统资源浪费,影响整体性能。为了解决这个问题,开发人员通常会使用连接池来管理和...
在IT领域,网络编程是不可或缺的一部分,而Socket编程则是实现网络通信的基础。本文将深入探讨如何利用Socket进行连续发送与连续接收数据,基于标题“利用socket连续发送与连续接收数据”以及描述中提到的实现过程。...
Java Socket编程是网络编程的基础,它提供了在两个应用程序之间建立通信连接的能力。在这个场景中,我们讨论的是如何使用Java的Socket来实现文件上传功能,即从客户端将文件发送到服务器,然后保存到服务器的数据库...
在Java开发中,Socket编程是一种常见的网络通信方式,它允许不同计算机上的应用程序通过网络进行交互。然而,对于涉及敏感信息的应用场景,如金融交易、个人隐私数据处理等,仅仅依靠Socket的基础功能是远远不够的,...
java socket client 断线重连的简单实现 有什么意见可以提哦
下面是一个简单的Java Socket客户端示例,用于连接到一个聊天服务器: ```java import java.io.*; import java.net.*; public class ChatClient { public static void main(String[] args) { try (Socket socket...
Java Socket网络编程是Java平台中的核心特性,它为开发者提供了在TCP/IP协议下创建网络应用的能力。Socket编程主要用于实现客户端和服务器之间的通信,基于客户机/服务器模型。在这个模型中,服务器端通常处于被动...
1. 满足具有Socket客户端需求的基本应用. 2. 满足具有Socket服务端的基本应用. 具备并发能力, 能满足可设定个数客户端连接. 参考个人博客: http://blog.csdn.net/ostrichmyself/article/details/6618349
Java Socket技术是网络编程中的重要组成部分,主要用于实现两个应用程序之间的通信。在这个场景中,我们讨论的是如何使用Java Socket来实现实时的屏幕监控功能,即服务端能够远程查看客户端的屏幕内容,这样的功能在...
Java Socket编程是网络编程的基础,它是Java API提供的一种用于实现客户端-服务器通信的接口。在Java中,Socket类和ServerSocket类是进行网络通信的核心组件。这个经典版本可能包含了一系列关于如何有效使用Java ...
Java Socket 实现 SMTP 发送邮件是一项常见的编程任务,尤其在自动化通知、系统间通信或用户交互中非常有用。SMTP(Simple Mail Transfer Protocol)是互联网上用于传输电子邮件的标准协议,而Java Socket则是Java...
在这个"一个简单的java socket程序"中,我们将会探讨如何构建一个基础的服务器端(Server)和客户端(Client)模型,这对于初学者来说是一个很好的入门级教程。 首先,我们需要理解Socket的基本概念。Socket在Java...
- **Socket类**:在Java中,`java.net.Socket`类代表一个TCP连接,它封装了输入/输出流,用于与服务器进行数据交换。 - **ServerSocket类**:`java.net.ServerSocket`类用于监听客户端的连接请求,一旦有连接请求...
Java Socket编程是Java网络编程的基础,它提供了网络通信的能力,使得程序可以与其他计算机上的服务进行交互。在本案例中,我们将关注如何使用Java Socket来实现SMTP(Simple Mail Transfer Protocol)邮件发送,并...