socket网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。
Socket连接过程
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
通信原理
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketService {
// 搭建服务器端
public static void main(String[] args) throws IOException {
try {
ServerSocket server = null;
server = new ServerSocket(5209);
// b)指定绑定的端口,并监听此端口。
System.out.println("服务器启动成功");
// 创建一个ServerSocket在端口5209监听客户请求
Socket socket;
PrintWriter writer ;
while(true){
socket = server.accept();
// 2、调用accept()方法开始监听,等待客户端的连接
// 使用accept()阻塞等待客户请求,有客户
// 请求到来则产生一个Socket对象,并继续执行
// 由Socket对象得到输入流,并构造相应的BufferedReader对象
writer = new PrintWriter(socket.getOutputStream());
// 如果该字符串为 "bye",则停止循环
writer.println(getTable());
// 向客户端输出该字符串
writer.flush();
// 5、关闭资源
//writer.close();
}
// writer.close(); // 关闭Socket输出流
//socket.close(); // 关闭Socket
//server.close(); // 关闭ServerSocket
} catch (Exception e) {// 出错,打印出错信息
e.printStackTrace();
}
}
public static String getTable(){
StringBuffer sb = new StringBuffer();
sb.append("<html>");
sb.append("<body>");
sb.append("<hr color='red'>这个表格有一个标题,以及粗边框:</hr>");
sb.append("<table style='border:1px solid #ff0000;width='1600px';border-collapse:collapse;'>");
sb.append("<caption>我的标题</caption>");
sb.append("<tr>");
sb.append(" <td style='border:1px #0066ff solid;' >100</td>");
sb.append("<td style='border:1px #0066ff solid;' >200</td>");
sb.append("<td style='border:1px #0066ff solid;' >300</td>");
sb.append("</tr>");
sb.append("<tr>");
sb.append("<td style='border:1px #0066ff solid;' >400</td>");
sb.append("<td style='border:1px #0066ff solid;' >500</td>");
sb.append("<td style='border:1px #0066ff solid;' >600</td>");
sb.append("</tr>");
sb.append("</table>");
sb.append("</body>");
sb.append("</html>");
return sb.toString();
}
}
相关推荐
《Web安全深度剖析》从攻到防,从原理到实战,由浅入深、循序渐进地介绍了Web 安全体系。全书分4 篇共16 章,除介绍Web 安全的基础知识外,还介绍了Web 应用程序中最常见的安全漏洞、开源程序的攻击流程与防御,并...
java web 方面的安全信息 SSL通信原理及Tomcat SSL双向配置
《Java-web程序设计》教案 课题:第一章 Java Web概述 ... Web服务器:JSP运行时需要安装JDK和Web服务器,目前使用较多的Web服务器有Tomcat、 WebLogic、Jboss和Resin等。本书选用Tomcat。Tomcat是Apache 软件基金会
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...
2. 服务器端技术:了解服务器端开发的基本概念和原理,包括HTTP协议、RESTful架构、Web服务器(如Apache、Nginx)和应用服务器(如Tomcat、Jboss)的配置和管理。 3. 数据库:掌握关系数据库的基本概念,如SQL语言、...
掌握Ajax的基本通信原理;掌握基于XML和JSON的Ajax数据规则。 Struts2 Struts2核心控制流程、Ognl、Action、Interceptor、Result、FreeMarker、Struts2标记库、Struts2扩展、Struts2应用技巧(输入验证、消息...
WEB服务器Tomcat 小服务程序 Cookie和会议 筛选器和监听器 国际化 文件上传下载 阶段三:JavaEE主流框架 春天 行动计划 国际奥委会 事物 SpringMVC 运行原理 数据绑定 MyBatis 缓存机制 运行原理 JPA 注解 映射 ...
并通过实际客户案例描述了客户端如何在WebSocket架构下使用HTTP长连接与服务器实现实时通信及消息推送的功能,读者通过阅读本文中案例示例代码的实现,能够更深刻理解WebSocket框架的技术原理和开发方法。...
[目录]Java之争 - 谁最吃亏 17. [目录]真成JAVA大牛还是很有前途的 18. [目录]Jbuilder及Swing,多线程问题讨论 7. [目录]快乐Java大家谈 1. [目录]活动简介 2. [目录]庆祝专区 3. ...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...
但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...
5:Spring WEB:为基于WEB服务的应用程序提供上下文服务 6:Spring Context:向Spring框架提供上下文信息 7:Spring MVC:分离模型、视图、控制器、以便更容易定制 折构函数和虚函数? 答:折构函数式销毁一个类...