Java——Socket编程(一)
1. 网络基础知识
- 两台机器之间需要进行通信,需要满足的条件:
- 每个机器有一个唯一的标识符(IP地址);
- 他们之间进行通信需要用同一种语言(协议);
- 每台主机上面有多个应用程序,如QQ,微博,迅雷等,如何区别是哪个应用程序发出了请求,则需要使用不同的端口号:
- 端口号范围为:0-65535,其中0-1023为系统所保留;
- IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础;
- http: 80; ftp: 21; telnet: 23
- TCP/IP是目前世界上使用最广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合,也成TCP/IP协议族或TCP/IP协议栈
- TCP:Tranmission Control Protocol传输控制协议
- IP:Internet Protocol互联网协议
- TCP/IP五层模型:
- 一。物理层:双绞线,网卡,网线,
- 二。数据链路层
- 三。网络层:
- 四。传输层:TCP/IP协议
- 五。应用层:HTTP协议,FTP协议,SMTP协议,Telnet远程登录服务等
- Java对网络编程的支持:
- InetAddress类:用于标识网络上的硬件资源。
URL类:统一资源定位符,通过URL可以直接读取或写入网络上的数据。
- Sockets:使用TCP协议实现网络通信的Socket相关的类
- Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信。
2. InetAddress类:用于标识网络上的硬件资源,表示互联网(IP地址)。
- 查看Java API得到InetAddress类的方法信息:无构造函数,但是可以通过getByName("主机名/IP地址")返回InetAdress对象;
3. URL类:统一资源定位符(即网址),通过URL可以直接读取或写入网络上的数据。
- 由两部分组成:协议名称和资源名称,中间一冒号隔开,如http://www.baidu.com,分别表示http协议和资源名称
- 使用:多看API
public static void main(String[] args) {
//创建一个URL的实例
try {
URL imooc = new URL("http://www.imooc.com");
//?后面表示参数,#后面表示锚点
URL url = new URL(imooc, "/index.html?username=tom#test");
System.out.println("protocol: " + url.getProtocol());
System.out.println("host: " + url.getHost());
//如果未指定端口号,则使用默认的端口号,此时getPort()方法的返回值为-1
System.out.println("port: " + url.getPort());
System.out.println("path: " + url.getPath());
System.out.println("file: " + url.getFile());
System.out.println("Ref: " + url.getRef());
System.out.println("DefaultPort: " + url.getDefaultPort());
System.out.println("query: " + url.getQuery());
try {
System.out.println("content: " + url.getContent());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }- 使用URL读取网页内容:通过URL对象的openStream()方法可以得到指定资源的输入流
4. Socket通信
- TCP协议是面向连接的,可靠的,有序的,以字节流的方式发送数据
- 基于TCP协议实现网络通信的类
- 客户端的Socket类
- 服务器端的ServerSocket类
- 实现步骤:
- 创建ServerSocket和Socket
- 打开连接到Socket的输入/输出流
- 按照协议对Socket进行读/写操作
- 关闭输入输出流,关闭Socket
4. TCP编程
- 描述:实现用户的登录。实质就是客户端想服务器端发送信息(用户名和密码),服务器端进行响应。
- 服务器端:
- 创建ServerSocket对象,绑定监听端口;
- 通过accept()方法监听客户端请求;
- 连接建立后,通过输入流读取客户端发送的请求信息;
- 通过输出流向客户端发送响应信息;
- 关闭相应的资源。
- 客户端:
- 创建Socket对象,指明需要连接的服务器的地址和端口号;
- 连接建立后,通过输出流向服务器端发送请求信息;
- 通过输入流获取服务器响应的信息;
- 关闭相应的资源。
- 多线程服务器
- 应用多线程实现服务器与多客户端之间的通信,基本步骤如下:
- 服务器端创建ServerSocket,循环调用accept()等待客户端连接
- 客户端创建一个socket并请求和服务器连接
- 服务器端接收客户端请求,创建socket与该客户建立专线连接
- 建立连接的两个socket在一个单独的线程上对话
- 服务器端继续等待新的连接
- 应用多线程实现服务器与多客户端之间的通信,基本步骤如下:
5. UDP编程
- 描述:UDP连接是无连接的,不可靠的连接。
- DatagramPacket:表示数据报包;DatagramSocket:进行端到端的通信
- 服务器端步骤:
- 创建DatagramSocket,指定端口号
- 创建DatagramPacket
- 接收客户端发送的数据信息
- 读取数据
- 客户端步骤:
- 定义发送信息
- 创建DatagramPacket,包含将要发送的信息
- 创建DatagramSocket
- 发送数据
6. 注意
- 设置多线程的优先级
- 是否关闭输出和输入流:对于同一个socket,如果关闭了输出流,则与该输出流关联的socket也会被关闭,所以一般不用关闭流,直接关闭socket即可。
- 使用TCP通信传输对象,通过字符串的形式进行交互,更多的应该是使用对象的方式,可以将它封装成User对象:ObjectOutputStream流。
- Socket编程传递文件。
Java——Socket编程(一)的更多相关文章
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
- Java Socket编程(转)
Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...
- Java基础:三步学会Java Socket编程
Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛 第一步 ...
- 如何为可扩展系统进行Java Socket编程
从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...
- 多线程Java Socket编程示例
package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...
- 转:Java Socket编程
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将 ...
- Java Socket编程基础篇
原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Sock ...
- Java Socket编程详细解说
Java Socket编程 JavaSocketServerSocket乱码超时 Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是So ...
- Java Socket编程如何建立两者关系
转自:http://developer.51cto.com/art/201003/190582.htm Java Socket编程需要大家详细的学习,有关的技术一直在不断的更新.那么要如何才能掌握好有 ...
- 20182332 实验四《Java Socket编程 》实验报告
20182332 实验肆<数据结构与面向对象程序设计>实验报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 盛国榕 学号:20182332 实验教师:王志强 实验日 ...
随机推荐
- 【sinatra】修改默认ip绑定
加入 # 默认的bind是127.0.0.1 set :bind, '0.0.0.0' #0.0.0.0之后你能通过lan访问这个服务器
- C++中关于无法解析的外部符号问题LNK2019问题的总结
网上一般有很全面的解决方法,最近恰好本道长也遇到了这种问题,也恰好解决了,这种问题应该算作配置问题,而非程序本身问题,多数是因为接手了生疏的程序导致,此问题看上去很简单,但木有经验的话很 ...
- DOM4J解析xml案例
- Openstack的nova-network的vlan模式扩展2
接上一篇,上一篇我们使用的是nova-manage命令来创建的网络,这里就有一些知识需要了解 遇到的问题 控制节点的前面的BUG已经按官方解决BUG方式解决了,但是在开发dashboard,使用nov ...
- Android 常用工具类之DeviceInfoUtil
public class DeviceInfoUtil { private static WifiManager wifiManager = null; // wifi是否已连接 public sta ...
- 使用163CentOS镜像
CentOS镜像使用帮助 收录架构 i386 x86_64 SRPMS 收录版本 5 6 更新时间 每5小时更新一次 使用说明 首先备份/etc/yum.repos.d/CentOS-Base.r ...
- 虚拟机 本地 本机 双启动 运行 vhd local Dual Boot
在使用虚拟机的过程中, 可能会遇到虚拟机的运行要求过高, 电脑力不从心的情况. 为了让虚拟机使用更多电脑资源, 可以让虚拟机以本地双系统的方式,访问本地计算机资源. 打开磁盘管理,在磁盘上右键,选择 ...
- css 样式设计(一)( 在线150个例子 | 背景 | 文本 | 字体 | 链接 | 列表 | 表格 | 盒模型 | 边框 | 轮廓 | 边距 | 填充 |分组和嵌套 | 尺寸 | 定位 | 浮动 |对齐 )
一.css在线150个例子 http://www.w3cschool.cc/css/css-examples.html 二.背景图片水平方向重复 : body { background-image:u ...
- [BIM]案例
以下是中建三局BIM小组的项目,用以参考: BIM协同设计与质量控制 现实建筑物实体都是以三维空间状态存在,若用三维设计表达更具有优势.如复杂管综设计,一般情况下,二维AutoCAD设计是在建筑.结构 ...
- js编程-面相对象
//js面相对象编程 //定义constructor构造方法 function myFn(name,sex){ this.name = name; this.sex = sex; } //用proto ...