不知道做了什么,电脑好卡。。。讲讲Socket,我不太懂,却开始懂得知识
2014-05-10 23:57
267 查看
首先是,我看视频做的笔记,视频是兄弟连的java视频,不错,还是能够很生动的理解的。
/** 网络通信协议:
要使计算机连城的网络能够互通信息,需要对数据传输速率、传输代码、代码结构、传输控制步骤、出错控制等制定一组标准,这一组共同遵守的通信标准就是网络通信协议,不同的计算机之间必须使用相同的通讯协议才能进行通信
*/
/**网络通信接口:
为了使两个节点之间能进行对话,必须在他们之间建立通信工具(接口),使彼此之间能够进行信息交换,
接口包括两部分:
硬件:实现节点之间的信息传送(工具)
软件:规定双方进行通信的约定协议(代码)
*/
/** 传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。
通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。
*/
/** IP地址(英语:Internet Protocol Address)是一种在Internet上的给主机编址的方式,也称为网际协议地址。网络中每台计算机的一个标识号。常见的IP地址,分为IPv4与IPv6两大类。
本地IP:127.0.0.1 /localhost
端口号(port):端口号范围:0~65535之间,0~1024之间的端口是用于一些知名的网络服务和应用
*/
/** 网络编程主要是指完成C/S程序的开发,程序的开发结构有两种:
C/S:(Client/Server或客户/服务器模式):Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。[开发两套程序,两套程序同时维护,例如:QQ等,一般都比较稳定]
B/S:(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser)如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。
[开发一套程序,客户端使用浏览器进行访问,例如:论坛等,稳定性差,安全性也差]
但是C/S的程序开发在实际的java应用中毕竟很少了,而且整个java基本都是以B/S为主。
【C/S维护成本高,还需要下载客户端才行,所以开发的程序就越来越少了。】
*/
/** C/S程序主要可以完成以下两种程序的开发:
TCP(Transmission Control Protocol):传输控制协议,采用三方握手的方式,保证准确的连接操作。例如战地报[需要保密发送的]。
UDP(User Datagram Protocol):数据报协议,发送数据包,例如:手机短信或qq消息[不可靠,但是是公众的数据]
数据帧格式:| 协议类型 | 源IP | 目标IP | 源端口 | 目标端口 | 帧序号 | 帧数据 |
*/
/** tcp程序概述:
tcp是一个可靠协议,面向连接协议
实现tcp程序,需要编写服务器和客户端,javaAPI为我们提供了net包,为实现网络应用程序提供类。
ServerSocket:此类实现服务器套接字。
Socket:此类实现客户端套接字
Socket是网络驱动层提供给应用程序编程的接口和一种机制。
[就好像淘宝,卖家和卖家都只需要和快递员交流,就可以把货物从卖家发送到买家了,但是买家和卖家接触的快递员是两个不同的快递员,在这里快递员就是Socket,扮演的是中间人的作用。]
*/
/** 实现服务器端和客户端程序:
服务器端:
public class ServerSocket extends Object
实现服务器套接字,服务器套接字等待请求通过网络传入,它基于该请求执行某些操作,然后可能向请求者返回结果。
ServerSocket(int port);
创建绑定到特定端口的服务器套接字。
void setSoTimeout(int timeout);
通过制定超市启用/禁用SO_TIMEOUT,以毫秒为单位。
InetAddress getInetAddress();
返回此服务器套接字的本地地址。
Socket accept();
侦听并接受到此套接字的连接
客户端:
public class Socket extends Object
此类实现客户端套接字,是两台机器间通信的端点。
Socket(String host,int port);
创建一个流套接字并将其连接到制定主机上的指定端口号
InputStream getInputStream();
返回此套接字的输入流
OutputStream getOutputStream();
返回此套接字的输出流
void setSoTimeout(int timeout);
启用/禁用带有指定超时值的SO_TIMEOUT,以毫秒为单位。
*/
/** ECHO程序:
ECHO为应答,程序的功能是客户端向服务器发送一个字符串,服务器不做任何处理,直接把字符串返回给客户端
Echo程序是最为基本的客户/服务器端程序。
*/
下面是我在看视频的时候,照敲的代码,不得不说这个代码还是有些问题的,所以我进行了优化,下面的代码和视频中的有些不一样,想知道我做了什么优化的,可以去下载视频看看,然后对比看有哪些不同,然后就可以学到东西了,哈哈哈~~不想看视频的,那就直接看我的代码吧~~明天再对代码进行解释:
下面是客户端的代码:
/** 网络通信协议:
要使计算机连城的网络能够互通信息,需要对数据传输速率、传输代码、代码结构、传输控制步骤、出错控制等制定一组标准,这一组共同遵守的通信标准就是网络通信协议,不同的计算机之间必须使用相同的通讯协议才能进行通信
*/
/**网络通信接口:
为了使两个节点之间能进行对话,必须在他们之间建立通信工具(接口),使彼此之间能够进行信息交换,
接口包括两部分:
硬件:实现节点之间的信息传送(工具)
软件:规定双方进行通信的约定协议(代码)
*/
/** 传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。
通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。
*/
/** IP地址(英语:Internet Protocol Address)是一种在Internet上的给主机编址的方式,也称为网际协议地址。网络中每台计算机的一个标识号。常见的IP地址,分为IPv4与IPv6两大类。
本地IP:127.0.0.1 /localhost
端口号(port):端口号范围:0~65535之间,0~1024之间的端口是用于一些知名的网络服务和应用
*/
/** 网络编程主要是指完成C/S程序的开发,程序的开发结构有两种:
C/S:(Client/Server或客户/服务器模式):Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。[开发两套程序,两套程序同时维护,例如:QQ等,一般都比较稳定]
B/S:(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser)如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。
[开发一套程序,客户端使用浏览器进行访问,例如:论坛等,稳定性差,安全性也差]
但是C/S的程序开发在实际的java应用中毕竟很少了,而且整个java基本都是以B/S为主。
【C/S维护成本高,还需要下载客户端才行,所以开发的程序就越来越少了。】
*/
/** C/S程序主要可以完成以下两种程序的开发:
TCP(Transmission Control Protocol):传输控制协议,采用三方握手的方式,保证准确的连接操作。例如战地报[需要保密发送的]。
UDP(User Datagram Protocol):数据报协议,发送数据包,例如:手机短信或qq消息[不可靠,但是是公众的数据]
数据帧格式:| 协议类型 | 源IP | 目标IP | 源端口 | 目标端口 | 帧序号 | 帧数据 |
*/
/** tcp程序概述:
tcp是一个可靠协议,面向连接协议
实现tcp程序,需要编写服务器和客户端,javaAPI为我们提供了net包,为实现网络应用程序提供类。
ServerSocket:此类实现服务器套接字。
Socket:此类实现客户端套接字
Socket是网络驱动层提供给应用程序编程的接口和一种机制。
[就好像淘宝,卖家和卖家都只需要和快递员交流,就可以把货物从卖家发送到买家了,但是买家和卖家接触的快递员是两个不同的快递员,在这里快递员就是Socket,扮演的是中间人的作用。]
*/
/** 实现服务器端和客户端程序:
服务器端:
public class ServerSocket extends Object
实现服务器套接字,服务器套接字等待请求通过网络传入,它基于该请求执行某些操作,然后可能向请求者返回结果。
ServerSocket(int port);
创建绑定到特定端口的服务器套接字。
void setSoTimeout(int timeout);
通过制定超市启用/禁用SO_TIMEOUT,以毫秒为单位。
InetAddress getInetAddress();
返回此服务器套接字的本地地址。
Socket accept();
侦听并接受到此套接字的连接
客户端:
public class Socket extends Object
此类实现客户端套接字,是两台机器间通信的端点。
Socket(String host,int port);
创建一个流套接字并将其连接到制定主机上的指定端口号
InputStream getInputStream();
返回此套接字的输入流
OutputStream getOutputStream();
返回此套接字的输出流
void setSoTimeout(int timeout);
启用/禁用带有指定超时值的SO_TIMEOUT,以毫秒为单位。
*/
/** ECHO程序:
ECHO为应答,程序的功能是客户端向服务器发送一个字符串,服务器不做任何处理,直接把字符串返回给客户端
Echo程序是最为基本的客户/服务器端程序。
*/
下面是我在看视频的时候,照敲的代码,不得不说这个代码还是有些问题的,所以我进行了优化,下面的代码和视频中的有些不一样,想知道我做了什么优化的,可以去下载视频看看,然后对比看有哪些不同,然后就可以学到东西了,哈哈哈~~不想看视频的,那就直接看我的代码吧~~明天再对代码进行解释:
下面是客户端的代码:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package EchoTest; import java.io.*; import java.net.*; /** * * @author Janeness */ public class EchoServerDemo { public static void main(String[] args) throws IOException { //这里是创建一个服务器端的Socket ServerSocket ss = new ServerSocket(8000); System.out.println("服务器已经启动"); System.out.println("正在等待连接。。。"); Socket s = ss.accept(); System.out.println("已连接到:" + s.getInetAddress().getHostAddress()); //获取输入输出流 BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream())); PrintStream ps = new PrintStream( new BufferedOutputStream(s.getOutputStream())); boolean bool = true;//循环接收数据 while (bool) { String info = br.readLine(); if (info == null || "bye".equals(info)) { System.out.println(info); ps.println("echo:" + info); ps.flush(); bool = false; } else { System.out.println(info); ps.println("echo:" + info); ps.flush(); } } System.out.println("客户端断开连接!"); ps.close(); br.close(); } }接下来是客户端的代码:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package EchoTest; import java.io.*; import java.net.*; import java.util.Scanner; /** * * @author Janeness */ public class EchoClientDemo { public static void main(String args[]) throws UnknownHostException, IOException { Socket s = new Socket("localhost", 8000); System.out.println("与服务器连接成功!"); Scanner input = new Scanner(System.in); boolean flag = true; PrintStream ps = new PrintStream( new BufferedOutputStream(s.getOutputStream())); BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream())); while (flag) { System.out.println("请输入:"); String info = input.next(); if ("bye".equals(info)) { ps.println(info); ps.flush(); flag = false; } else { ps.println(info); ps.flush(); System.out.println(br.readLine()); } } ps.close(); br.close(); } }
相关文章推荐
- yii 使用renderPartial调用另外一个控制器的视图
- 自定义TabWidget
- C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
- 《c++ primer》学习笔记 第六章 语句
- 挑战程序设计竞赛 2.1迷宫的最短路径
- exe, dll 中资源提取工具
- 《C++ Primer(第5版)》学习笔记:第2章 变量和基本类型
- iOS 人机交互指导方针(iOS Human Interface Guidelines)
- 《c++primer(第四版)》习题11.9
- android tabwidget 调整高度文字居中
- Codeforces Round #243 (Div. 1) A Sereja and Swaps
- 图文解说:Nginx+tomcat配置集群负载均衡
- 【蓝桥杯】分糖果(2014预赛java-B7)
- [转]linux awk命令详解
- Java反射机制
- 《c++primer(第四版)》习题8.16
- 《c++primer(第四版)》习题8.9
- 程序阅读2
- 前端开发学习之路
- 3dmax2012安装以及激活教程