在这之前我们先了解一下一些关于网络编程的概念

  网络编程从大方面说就是对信息的发送和接收,中间传输为物理线路的作用,编程人员可以不用考虑
  网络编程最主要的工作就是在发送端吧信息通过规定好的协议进行组装包,在接收端按照规定好的
  协议进行包装解析,从而提取对应的信息,达到通信的目的
网络编程的三要素
  1.IP地址
    唯一标识网络上的每一台计算机
  构成:32位,由4个8位二进制数组成
  
  IP地址=网络地址加主机地址
    网络地址:标识计算机或网络设备所在的网段
    主机地址:标识特定主机或网络设备
  

 
  2.端口
  "端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。
 
 

两类传输协议:TCP   UDP

  TCP就是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送

  方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个

  socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。

  UDP就是Use  Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的

  路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

什么是Socket
  网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
  建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,
  这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

Socket网络编程可以分为以下步骤

  1.建立连接

  2.打开Socket关联的输出流

  3.数据流读取信息

  4.关闭所有数据流和Socket

Socket实现原理机制

  1.通信两端都有Socket  

  2.网络通信其实就是Socket间的通信

  3.数据在两个Socket间通过IO传输

 Socket 通信模型

  进行网络通信时,Socket需要借助数据流来完成数据流的传递工作

  

如何实现多客户请求呢

采用多线程方式

一个专门负责监听的应用服务程序

一个专门负责处理请求的线程程序

DatagramPacket类

  封装了数据报的数据,数据长度,目标地址和目标端口

DatagramSocket类

  接收和发送DatagramPacket对象封装好的数据报

基于UDP协议的Socket网络编程步骤

  1.利用DatagramPacket对象封装数据报

  2.利用DatagramSocket发送数据报

  3.利用DatagramSocket接收数据报

  4.利用DatagramPacket处理数据报

使用两种协议实现简单的对话功能(简单的对话功能)

ServerSocket sk=new ServerSocket(11111);
//2.监听
Socket s=sk.accept();
//打包数据
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
OutputStream os=s.getOutputStream();
String line=null;
while((line=br.readLine())!=null){
System.out.println("Client \t"+line); os.write(bw.readLine().getBytes());
}
//释放资源
s.close();
//sk.close();
    Socket sk=new Socket("192.168.111.1",11111);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
String line=null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
InputStream is=sk.getInputStream();
byte [] by=new byte[1024];
int num=is.read(by);
String h=new String(by, 0, num);
System.out.println("Service:\t"+h);
}
//br.close();
//bw.close();
sk.close(); }

实现结果

==============================================

=======================================

========================================

Socket初步了解的更多相关文章

  1. ACE的Socket初步

    Tcp通信过程一般为如下步骤: 服务器绑定端口,等待客户端连接. 客户端通过服务器的ip和服务器绑定的端口连接服务器. 服务器和客户端通过网络建立一条数据通路,通过这条数据通路进行数据交互. 常用AP ...

  2. java socket初步学习一 ( tcp)

    Java socket通信程序: 第一版本: 实现功能: 服务器地址:127.0.0.1  端口:5050 客户机:端口5050 客户端发送字符:“t” 服务器接收到该字符并回复:“r” 流程: 建立 ...

  3. socket初步

    简单demo:https://blog.csdn.net/ns_code/article/details/14105457

  4. 【PHPsocket编程专题(理论篇)】初步理解TCP/IP、Http、Socket.md

    前言 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API).那TCP/IP又是什么呢?TCP/IP是ISO/OS ...

  5. 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为

    初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...

  6. 【2016-11-10】【坚持学习】【Day23】【Socket 编程初步了解】

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.

  7. 初步理解socket

    近期研究下socket,发现自己还是有非常多不明确的地方,索性沉下心来,从最基础開始学习,開始看起,如今对自己的学习做下小小总结,以便和大家分享,如有谬误,敬请指正. 原创文章,转载请注明出处:htt ...

  8. 在web浏览器上显示室内温度(nodeJs+arduino+socket.io)

    上次的nodejs操作arduino入门篇中实现了如何连接arduino.这次我们来实现通过arduino测量室内温度并在浏览器上显示出来. [所需材料] 硬件:LM35温度传感器,arduino u ...

  9. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

随机推荐

  1. C#操作AD及Exchange Server总结(二)

    上一节C#操作AD及Exchange Server总结(一)写了对AD的操作,新建AD用户后,通常都需要为此用户开启Exchange邮箱,接下来写如何远程操作Exchange. 三.对Exchange ...

  2. iOS之block,一点小心得

    作为一个iOS开发程序员,没用过block是不可能的.这次我探讨的是block原理,但是有些更深层次的东西,我也不是很清楚,以后随着更加了解block将会慢慢完善. 第一个问题,什么是block? 我 ...

  3. MFC DLL获取当前路径

    .首先定义此获取模块的静态方法 #if _MSC_VER >= 1300 // for VC 7.0 // from ATL 7.0 sources #ifndef _delayimp_h ex ...

  4. Charles抓包工具简单操作

    一.界面介绍 1.功能是clear,清理掉所有请求显示信息. 2.功能是搜索关键字,也可以使用ctrl+f实现,可以设置搜索的范围 3.功能是开始或暂停 4.显示所抓取的数据包 5.抓取数据包的请求及 ...

  5. CentOS7防火墙firewalld

    1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld  停止: systemctl disab ...

  6. django博客项目1.环境搭建

    安装 Python Windows 下安装 Python 非常简单,去 Python 官方网站找到 Python 3 的下载地址,根据你的系统选择 32 位或者 64 位的安装包,下载好后双击安装即可 ...

  7. boost atomic

    文档: http://www.boost.org/doc/libs/1_53_0/doc/html/atomic.html Presenting Boost.Atomic Boost.Atomic i ...

  8. while循环中的break、continue和else

    break:直接结束当前循环然后跳到下面的语句.break之后在循环外continue:结束本次循环,跳到下次循环.continue之后依然还在循环内else:这是while循环所特有,当循环结束之后 ...

  9. JavaScript:关闭当前页面(微信、电脑)

    WeixinJSBridge.call('closeWindow'); // 关闭微信浏览器 window.opener=null; window.open('','_self'); window.c ...

  10. angularJS 中的传参

    今天总结一下 angularJS 传参的 3种方式:(配合 ui-router) 现在有两个页面,page1.html 和 page2.html, 现由 page1.html 向 page2.html ...