1 OSI七层模型概念介绍

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

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

客户端代码

  1. package com.asiaInfo.caozg.ch_01;
  2.  
  3. import java.io.*;
  4. import java.net.Socket;
  5.  
  6. /**
  7. * @Authgor: gosaint
  8. * @Description:
  9. * @Date Created in 21:31 2018/1/7
  10. * @Modified By:客户端代码
  11. */
  12. public class EchoClient {
  13. // 本机的IP地址
  14. private String host = "localhost";
  15. // 本机的端口号
  16. private int port = 8000;
  17. // socket 对象
  18. private Socket socket;
  19. // 构造器初始化Socket对象
  20. public EchoClient() throws IOException {
  21. socket = new Socket(host, port);
  22. }
  23. // 测试方法
  24. public static void main(String args[]) throws IOException {
  25. new EchoClient().talk();
  26. }
  27.  
  28. private PrintWriter getWriter(Socket socket) throws IOException {
  29. OutputStream socketOut = socket.getOutputStream();
  30. return new PrintWriter(socketOut, true);
  31. }
  32.  
  33. private BufferedReader getReader(Socket socket) throws IOException {
  34. InputStream socketIn = socket.getInputStream();
  35. return new BufferedReader(new InputStreamReader(socketIn));
  36. }
  37.  
  38. public void talk() throws IOException {
  39. try {
  40. // 从socket读取数据
  41. BufferedReader br = getReader(socket);
  42. // 向socket写入数据
  43. PrintWriter pw = getWriter(socket);
  44. // 把控制台输入的数据转换为字符流,然后读取
  45. BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
  46. String msg = null;
  47. while ((msg = localReader.readLine()) != null) {
  48. // 将读取的数据写出的输出流(打印流)
  49. pw.println(msg);
  50. System.out.println(br.readLine());
  51.  
  52. if (msg.equals("bye"))
  53. break;
  54. }
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. } finally {
  58. try {
  59. socket.close();
  60. } catch (IOException e) {
  61. e.printStackTrace();
  62. }
  63. }
  64. }
  65. }

服务端流程

  1. package com.asiaInfo.caozg.ch_01;
  2.  
  3. import java.io.*;
  4. import java.net.*;
  5.  
  6. public class EchoServer {
  7. private int port = 8000;
  8. private ServerSocket serverSocket;
  9.  
  10. public EchoServer() throws IOException {
  11. serverSocket = new ServerSocket(port);
  12. System.out.println("服务器启动");
  13. }
  14.  
  15. public String echo(String msg) {
  16. return "echo:" + msg;
  17. }
  18.  
  19. private PrintWriter getWriter(Socket socket) throws IOException {
  20. OutputStream socketOut = socket.getOutputStream();
  21. return new PrintWriter(socketOut, true);
  22. }
  23.  
  24. private BufferedReader getReader(Socket socket) throws IOException {
  25. InputStream socketIn = socket.getInputStream();
  26. return new BufferedReader(new InputStreamReader(socketIn));
  27. }
  28.  
  29. public void service() {
  30. while (true) {
  31. Socket socket = null;
  32. try {
  33. socket = serverSocket.accept(); //等待客户连接
  34. System.out.println("New connection accepted "
  35. + socket.getInetAddress() + ":" + socket.getPort());
  36. // 从socket获取输入流字符,阅读消息
  37. BufferedReader br = getReader(socket);
  38. // 向socket写出数据
  39. PrintWriter pw = getWriter(socket);
  40.  
  41. String msg = null;
  42. // 阅读消息
  43. while ((msg = br.readLine()) != null) {
  44. System.out.println(msg);
  45. // 写出消息
  46. pw.println(echo(msg));
  47. if (msg.equals("bye")) //如果客户发送的消息为“bye”,就结束通信
  48. break;
  49. }
  50. } catch (IOException e) {
  51. e.printStackTrace();
  52. } finally {
  53. try {
  54. if (socket != null) socket.close(); //断开连接
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. }
  60. }
  61.  
  62. public static void main(String args[]) throws IOException {
  63. new EchoServer().service();
  64. }
  65. }
4 Socket用法
    (1):连接本机1-1024端口
该Demo的作用是练习Socket对象的创建。我们通过连接端口,表明该端口被服务器监听了。在这个区间的大多端口已经被占用,但是我们还是可以连接没有被占用的端口。

  1. public class PortScanner{
  2.  
  3. public static void main(String[] args){
  4. private String host="localhost";//本机的IP地址
  5. new PortScanner().scan(host);
  6. }
  7. public void scan(String host){
  8. Socket s=null;
  9. try{
  10. for(int port=1;port<1024;port++){
  11. // 创建socket对象
  12. s=new Socket(host,port);
  13. System.out.println("该端口没有被占用:"+port);
  14. }
  15. }catch(IOException e){
  16. Systrm.out.println("该端口被占用:"+port);
  17. }finally{
  18. try{
  19. if(s!=null)
  20. s.close;
  21. }catch(Exception e){
  22. e.printStackTrance();
  23. }
  24. }
  25. }
  26. }

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. mysql练习(待补充)

    2.查询‘生物’课程比‘物理’课程成绩高的所有学生的学号 思路: 获取所有生物课程的人(学号,成绩)-临时表 获取所有物理课程的人(学号,成绩)-临时表 根据学号连接两个临时表: 学号 生物成绩 物理 ...

  2. 第五章 python中的异常处理

    每种编程语言都会有自己的异常处理机制,虽然各有特色,但基本上都差不多,那么python中强大异常处理机制是什么样的呢? 一.异常: python用异常对象来表示异常情况,遇到错误后,会引发异常.如果异 ...

  3. Python 3 面向对象进阶

    Python 3 面向对象进阶 一.    isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的 ...

  4. mini2440移植uboot 2014.04(一)

    最新版的uboot添加了很多新功能,我决定在最新版代码基础上重新移植一遍加深理解. 我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot- ...

  5. 剑指offer——圆圈中最后剩下的数字

    1.如果通过环形列表去模拟圆圈的话,最后时间复杂度为O(mn),而且还需要一个辅助链表来模拟圆圈,空间复杂度为O(n). 2.通过找出递推公式的方法,求得递推公式为 时间复杂度为O(n),空间复杂度为 ...

  6. Python 案例一(计算人体体脂率)

    #计算人体体脂率 #输入部分 #身高 personHeight = input("请输入你的身高(m):") personHeight = float(personHeight) ...

  7. poj 1419Graph Coloring 【dfs+补图+计算最大团+计算最大独立集 【模板】】

    题目地址:http://poj.org/problem?id=1419 Graph Coloring Time Limit: 1000MS   Memory Limit: 10000K Total S ...

  8. DL二(稀疏自编码器 Sparse Autoencoder)

    稀疏自编码器 Sparse Autoencoder 一神经网络(Neural Networks) 1.1 基本术语 神经网络(neural networks) 激活函数(activation func ...

  9. Struts调用DMI

    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>

  10. kylin_学习_01_kylin安装部署

    一.环境准备 根据官方文档,kylin是需要运行在hadoop环境下的,如下图: 1.hadoop环境搭建 参考:hadoop_学习_02_Hadoop环境搭建(单机) 2.hbase环境搭建 参考: ...