java--基于socket的网络传输开发
继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的网络传输开发的更多相关文章
- Java基于Socket文件传输示例(转)
最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解.在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加 ...
- Java基于Socket文件传输示例
http://www.blogjava.net/sterning/archive/2007/10/13/152508.html 最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步 ...
- java socket 多线程网络传输多个文件
http://blog.csdn.net/njchenyi/article/details/9072845 java socket 多线程网络传输多个文件 2013-06-10 21:26 3596人 ...
- java基于socket的网络通信,实现一个服务端多个客户端的群聊,传输文件功能,界面使用Swing
最近在复习java的io流及网络编程.但复习写那些样板程序总是乏味的.便准备写个项目来巩固.想来想去还是聊天项目比较好玩.如果日后完成的比较好自己也可以用(哈哈哈).并且自己后面也要继续巩固java多 ...
- java基于socket公共聊天室的实现
项目:一个公共聊天室功能的实现,实现了登录聊天,保存聊天记录等功能. 一.实现代码 1.客户端 ChatClient.java import java.io.BufferedReader; impor ...
- java基于socket的简单聊天系统
/*=============服务端================*/ /** * 服务器程序 在9999端口监听 * 可以通过控制台输入来回应客户端* @author xiaoluo* @qq 3 ...
- 基于socket的udp传输,socketserver模块,进程
基于UDP的套接字 udp是无连接的,先启动哪一端都不会报错 socket.SOCK_DGRAM 数据报协议 udp不会发送空数据,什么都不输入直接发送也会有报头发过去 服务端 import sock ...
- c#网络传输
接着前面简单讲的,给大家聊聊服务开发. 网络传输 先说网络传输开发,总体来说,可以看成4中模型 我们把传输过程看做网线,那么在通过传输的过程中.2边就涉及池化问题,也就是我们常见的异步传输. 在业务端 ...
- Linux 系统编程 学习:06-基于socket的网络编程1:有关概念
Linux 系统编程 学习:006-基于socket的网络编程1:有关概念 背景 上一讲 进程间通信:System V IPC(2)中,我们介绍了System IPC中关于信号量的概念,以及如何使用. ...
随机推荐
- Qt之开机自启动
Windows开机自启动的程序很多,包括系统软件.杀毒软件.一些其他安装软件等等.当然可以禁止,通过软件管理或者手动删除对应的注册表中的项即可!但是为了系统的服务或者操作上的方便,我们往往需要开机自启 ...
- kali之ARP欺骗获取图片流
其实很简单,就两步: 1. 后接三个参数: 网卡:eth0 网关:10.0.0.1 攻击目标:10.0.0.128 2.启动监听 会弹出一个框 里面就会显示攻击目标通过浏览器访问的页面上的 ...
- xxx==null和xxx.equals(null)的区别
如果xxx不是null的话,xxx==null将返回false,如果xxx是null的话,xxx将返回ture 而对xxx.equals(null)而言,他将永远返回false,因为如果xxx不是nu ...
- biz处理dao事务处理层
前言 正文 1.创建一个事物管理对象,该对象将连接对象绑定到当前线程 2.dao层的代码演示样例 3.biz层处理数据库的事务 总结
- Windows 8 动手实验系列教程 实验5:进程生命周期管理
动手实验 实验5:进程生命周期管理 2012年9月 简介 进程生命周期管理对构建Windows应用商店应用的开发者来说是需要理解的最重要的概念之一.不同于传统的Windows应用(它们即使在后台仍然继 ...
- [置顶] location.href你真的会用了?
*.location.href 用法: top.location.href=”url” 在顶层页面打开url(跳出框架) self.location.href=”url” ...
- 【转】有效修改max open files/ulimit -n
[转]有效修改max open files/ulimit -n_追梦20121222_新浪博客 [转]有效修改max open files/ulimit -n (2011-11-18 0 ...
- UVA11069 - A Graph Problem(DP)
UVA11069 - A Graph Problem(DP) 题目链接 题目大意:给你n个点.要你找出有多少子串符合要求.首先没有连续的数字,其次不能再往里面加入不论什么的数字而不违反第一条要求. 解 ...
- maven的pom 提示错误 Failure to transfer com.thoughtworks.xstream:xstream:jar:
pom文件提示错误,信息如下 Description Resource Path Location TypeFailure to transfer com.thoughtwor ...
- mysql union ,UNION RESULT
mysql> explain select * from t100 union all select * from t200; +----+--------------+------------ ...