继http://blog.csdn.net/gaopeng0071/article/details/10959845此文章内容展开的研究。

socket传输是基于tcp的网络传输协议进行的传输,tcp有一个特点,举个例子(视频上学的):

比如张三给李四打电话,张三拨通李四的电话号,李四接起了电话,这是张三说了一声你好,然后张三就一直等待李四的回复,如果李四不回复,那么张三那就这么一直等下去...

socket也是这样,只要server端没给client端一个回复那么后面的请求都一直等待,用法就是Socket socket = accept(); socket会根据server端是否为阻塞状态来判断是否可以进行下一个请求的传输。

所以为了解决这种问题,在server端或client端,请求数据的处理都单独开启一个线程进行处理。

代码如下:

		try {
while (true) {
Socket socket = accept(); // 阻塞
new CreateServerThread(socket);
}
} finally {
close();
}

第二行代码,是一个死循环。

第四行,是将线程通道变为阻塞的状态。

第五行,实例化一个类,此类继承Thread,在类中执行start方法。

CreateServerThread类,详见下面代码

		public CreateServerThread(Socket s) throws IOException {
client = s;
in = new BufferedReader(new InputStreamReader(client
.getInputStream()));// 获取socket的输入流
out = new PrintWriter(client.getOutputStream(), true);// 获取到socket的输出流
out.println("--- Welcome to this chatroom ---");
out.println("Input your nickname:");
start();
}

此类获取了socket的输入输出流后,开启线程处理后续工作。这样下一个请求即可快速进行,然后依次往返开启多线程来并行处理请求。

我理解的socket通信模式如下图:

java--基于socket的网络传输开发的更多相关文章

  1. Java基于Socket文件传输示例(转)

    最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解.在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加 ...

  2. Java基于Socket文件传输示例

    http://www.blogjava.net/sterning/archive/2007/10/13/152508.html 最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步 ...

  3. java socket 多线程网络传输多个文件

    http://blog.csdn.net/njchenyi/article/details/9072845 java socket 多线程网络传输多个文件 2013-06-10 21:26 3596人 ...

  4. java基于socket的网络通信,实现一个服务端多个客户端的群聊,传输文件功能,界面使用Swing

    最近在复习java的io流及网络编程.但复习写那些样板程序总是乏味的.便准备写个项目来巩固.想来想去还是聊天项目比较好玩.如果日后完成的比较好自己也可以用(哈哈哈).并且自己后面也要继续巩固java多 ...

  5. java基于socket公共聊天室的实现

    项目:一个公共聊天室功能的实现,实现了登录聊天,保存聊天记录等功能. 一.实现代码 1.客户端 ChatClient.java import java.io.BufferedReader; impor ...

  6. java基于socket的简单聊天系统

    /*=============服务端================*/ /** * 服务器程序 在9999端口监听 * 可以通过控制台输入来回应客户端* @author xiaoluo* @qq 3 ...

  7. 基于socket的udp传输,socketserver模块,进程

    基于UDP的套接字 udp是无连接的,先启动哪一端都不会报错 socket.SOCK_DGRAM 数据报协议 udp不会发送空数据,什么都不输入直接发送也会有报头发过去 服务端 import sock ...

  8. c#网络传输

    接着前面简单讲的,给大家聊聊服务开发. 网络传输 先说网络传输开发,总体来说,可以看成4中模型 我们把传输过程看做网线,那么在通过传输的过程中.2边就涉及池化问题,也就是我们常见的异步传输. 在业务端 ...

  9. Linux 系统编程 学习:06-基于socket的网络编程1:有关概念

    Linux 系统编程 学习:006-基于socket的网络编程1:有关概念 背景 上一讲 进程间通信:System V IPC(2)中,我们介绍了System IPC中关于信号量的概念,以及如何使用. ...

随机推荐

  1. JQuery - 去除所有空格

    $('#submit').click(function () { //去除所有空格 String.prototype.NoSpace = function () { return this.repla ...

  2. spring mvc MultipartFile 上传文件错误解决

    Field error in object 'xxxx' on field 'xxxx': rejected value [20129259128131.jpg]; codes [typeMismat ...

  3. JavaScript 进阶(二)变量作用域

    局部变量陷阱 先看一段代码: function foo() { var a = "hello" b = "world" return a + b; } 这个函数 ...

  4. 十天学习PHP之第三天

    1)按右边的结构:查看改动表结构  2)按右边的浏览:查看表中的数据  3)按右边的SQL:执行SQL语句  4)按右边的插入:插入一行记录  5)按右边的清空:删除表中全部记录  6)按右边的删除: ...

  5. gbs build使用说明

    注:本文从:https://source.tizen.org/documentation/articles/gbs-build 翻译而来. 1 前言 通过使用gbs build指令,开发者可以在本地编 ...

  6. 使用BigDecimal来进行精确计算

    在一些以金融等行业中的计算是需要十分精确的,即使我们使用像double这样的类型,由于浮点数的原因,会使得数据计算变得不精确,例如下面的例子: double a = 0.1; double b = 0 ...

  7. C++运算符重载的方法

    运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算.也就是说,运算符重载是通过定义函数实现的. 运算符重载实质上是函数的重载 重载运算符的函 ...

  8. 10165 - Stone Game(Nim游戏)

    UVA 10165 - Stone Game 题目链接 题意:给定n堆石子,每次能在一堆取1到多个.取到最后一个赢,问谁赢 思路:就裸的的Nim游戏,利用定理求解 代码: #include <s ...

  9. android在eclipse中打包(签名包)方法及常见问题解决

    打包成apk 右键单击项目名称,选择"Android Tools".再选择"Export Signed Application Package-",例如以下图所 ...

  10. Net线程安全集合

    在看Supersocket源码的时候发现很多地方都用到了我们不是很常用的线程安全集合,这些都是由net优化后的线程安全集合因此 应该比我们常规lock来效率好一些 比如说: 1 CurrentStac ...