1 OSI七层模型概念介绍

物理层:数据以比特的方式进行传递,典型的设备是集线器。该层主要规定了设备的电压或者端口等等一些列物理层面上的规定
    数据链路层:该层数据以帧的方式进行传递,主要是两个相邻的结点之间的数据传递,典型的设备就是交换机
    网络层:网络层顾名思义就是计算机网络之间的数据传递,包括子网之间。数据以包的方式传递。网络之间的路由规则等。典型的设备是路由器
    传输层:该层负责端设备之间的数据传递,以可靠的形式或者不可靠的形式传递。信息的传递是报文
    会话层:会话层负责进程之间的连接等一系列维护。数据的传递也是报文的形式
    表示层:表示层会对数据进行处理。比如加密操作,或者压缩或者格式转化等等
    应用层:确定数据的实际用途
2 TCP/IP协议
 

应用层 FTP  Telnet  HTTP        SNMP              DNS
传输层             TCP                     UDP
网络互联层                                       IP
主机-网络层 以太网:IEEE802.3
令牌环网:IEEE802.4
3 Echo(客户端-服务端)模型
客户端流程

客户端代码

package com.asiaInfo.caozg.ch_01;

import java.io.*;
import java.net.Socket; /**
* @Authgor: gosaint
* @Description:
* @Date Created in 21:31 2018/1/7
* @Modified By:客户端代码
*/
public class EchoClient {
// 本机的IP地址
private String host = "localhost";
// 本机的端口号
private int port = 8000;
// socket 对象
private Socket socket;
// 构造器初始化Socket对象
public EchoClient() throws IOException {
socket = new Socket(host, port);
}
// 测试方法
public static void main(String args[]) throws IOException {
new EchoClient().talk();
} private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
} private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
} public void talk() throws IOException {
try {
// 从socket读取数据
BufferedReader br = getReader(socket);
// 向socket写入数据
PrintWriter pw = getWriter(socket);
// 把控制台输入的数据转换为字符流,然后读取
BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
String msg = null;
while ((msg = localReader.readLine()) != null) {
// 将读取的数据写出的输出流(打印流)
pw.println(msg);
System.out.println(br.readLine()); if (msg.equals("bye"))
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

服务端流程

package com.asiaInfo.caozg.ch_01;

import java.io.*;
import java.net.*; public class EchoServer {
private int port = 8000;
private ServerSocket serverSocket; public EchoServer() throws IOException {
serverSocket = new ServerSocket(port);
System.out.println("服务器启动");
} public String echo(String msg) {
return "echo:" + msg;
} private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
} private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
} public void service() {
while (true) {
Socket socket = null;
try {
socket = serverSocket.accept(); //等待客户连接
System.out.println("New connection accepted "
+ socket.getInetAddress() + ":" + socket.getPort());
// 从socket获取输入流字符,阅读消息
BufferedReader br = getReader(socket);
// 向socket写出数据
PrintWriter pw = getWriter(socket); String msg = null;
// 阅读消息
while ((msg = br.readLine()) != null) {
System.out.println(msg);
// 写出消息
pw.println(echo(msg));
if (msg.equals("bye")) //如果客户发送的消息为“bye”,就结束通信
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null) socket.close(); //断开连接
} catch (IOException e) {
e.printStackTrace();
}
}
}
} public static void main(String args[]) throws IOException {
new EchoServer().service();
}
}
4 Socket用法
    (1):连接本机1-1024端口
该Demo的作用是练习Socket对象的创建。我们通过连接端口,表明该端口被服务器监听了。在这个区间的大多端口已经被占用,但是我们还是可以连接没有被占用的端口。

public class PortScanner{

    public static void main(String[] args){
private String host="localhost";//本机的IP地址
new PortScanner().scan(host);
}
public void scan(String host){
Socket s=null;
try{
for(int port=1;port<1024;port++){
// 创建socket对象
s=new Socket(host,port);
System.out.println("该端口没有被占用:"+port);
}
}catch(IOException e){
Systrm.out.println("该端口被占用:"+port);
}finally{
try{
if(s!=null)
s.close;
}catch(Exception e){
e.printStackTrance();
}
}
}
}

TCP/IP以及Socket对象基本的更多相关文章

  1. TCP/IP、SOCKET、HTTP之间的联系与区别

    主要内容: 1.网络的七层协议 2.TCP/IP.SOCKET.HTTP简介 3.TCP连接.HTTP连接.Socket连接的区别 一.网络的七层协议 网络七层由下往上分别为物理层.数据链路层.网络层 ...

  2. 网络协议HTTP、TCP/IP、Socket

    网络协议HTTP.TCP/IP.Socket 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.  其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的 ...

  3. ios开发网络知识 TCP,IP,HTTP,SOCKET区别和联系

    TCP,IP,HTTP,SOCKET区别和联系 网络由下往上分为:        对应 物理层-- 数据链路层-- 网络层--                       IP协议 传输层--     ...

  4. Linux内核 TCP/IP、Socket参数调优

    Linux内核 TCP/IP.Socket参数调优 2014-06-06  Harrison....   阅 9611  转 165 转藏到我的图书馆   微信分享:   Doc1: /proc/sy ...

  5. TCP/IP以及Socket聊天室带类库源码分享

    TCP/IP以及Socket聊天室带类库源码分享 最近遇到个设备,需要去和客户的软件做一个网络通信交互,一般的我们的上位机都是作为客户端来和设备通信的,这次要作为服务端来监听客户端,在这个背景下,我查 ...

  6. TCP/IP 和 Socket 的关系

    要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...

  7. TCP/IP,HTTP,Socket的区别与联系

    一 忆往昔,尽是悔恨泪.       在学校的时候学过,网络七层,也知道tcp的三次握手.但因为根本没用在实际开发中,所以逐渐淡忘.现在就再次理解下三个的区别与联系. 二 正题       网络七层: ...

  8. 【转】TCP/IP和SOCKET的区别

    要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...

  9. 网络基础之HTTP、TCP/IP、Socket

    一.HTTP相关 https://www.cnblogs.com/sunny-sl/p/6529830.html https://www.cnblogs.com/ranyonsue/p/5984001 ...

随机推荐

  1. rails跨域请求配置

    gem 'rack-cors', '~> 0.3.1'application.rb config.middleware.insert_before 0, "Rack::Cors&quo ...

  2. ThinkPHP 3.2.2 事务

    手册里说得非常清楚 : 5.3.19 事务支持 ThinkPHP提供了单数据库的事务支持,如果要在应用逻辑中使用事务,可以参考下面的方法: 启动事务: PHP代码 $User->startTra ...

  3. 每天一个Linux命令(24)tar命令

        tar命令可以为linux的文件和目录创建档案.     (1)用法: 用法:  tar  [选项]   [文件参数]     (2)功能:     功能:  用来压缩和解压文件.tar本身不 ...

  4. Data Structure Binary Tree: Inorder Tree Traversal without Recursion

    http://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion/ #include <iostream> #in ...

  5. OSI模型网络分层

    OSI TCP/IP --- ------- 应用层 表示层 应用层 会话层 ----- ------- 传输层 TCP UDP ----- ------- 网络层 IPv4/IPv6 ----- - ...

  6. web应用组成结构,web.xml的作用

  7. linux没有eth0

    1.创建ifcfg-eth0 touch /etc/sysconfig/network-scripts/ifcfg-eth0 2.配置ifcfg-eth0 DEVICE=eth0 HWADDR=:0c ...

  8. Linux下重命名文件或文件夹(mv命令与rename命令)

    在Linux下重命名文件或目录,可以使用mv命令或rename命令 mv ———————————— mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a ...

  9. 表达式计算-----------eval()运算符

    1.java的eval()方法(或称之为运算符)可以将字符串解析成可以运行的javaScript代码,例如 eval()只有一个参数.如果传入的参数不是一个字符串,那么它会直接返回这个参数.如果传入的 ...

  10. 如何实现1080P延迟低于500ms的实时超清直播传输技术

    再来当一次技术搬运工,内容来自高可用框架,学霸君工程师袁荣喜的如何实现1080P延迟低于500ms的实时超清直播传输技术. 导语:视频直播是很多技术团队及架构师关注的问题,在实时性方面,大部分直播是准 ...