1、Socket之间是如何通信的?
  1.1 通信是要两两之间进行的所以应该有至少一个客户端(Client)和一个服务器端(Server),一般来说都是多个c端对一个s端---c\s

  1.2 在客户端:可以创建Socket对象:Socket socket = new Socket(ip地址, 端口号);

  1.3 在服务器端:首先说明服务器不是硬件,而是一种软件。平时看到的“服务器”只是运行在服务器软件的硬件设备。标识服务器的类是:ServerSocket!ServerSocket ss = new ServerSocket(端口号);这么一写,呵呵,一个服务器搞定。

  1.4 客户端是如何找到服务端的呢?没错,就是通过IP地址和端口号。

      1.4.1 为什么还要端口号?通过IP地址知识能找到一台计算机而已,可是在一台计算机里面,有很多应用程序 啊,那你要找的服务器在哪里?这个时候就要通过端口号来找了,因为端口号是区分一台计算机上不同应用程序的关键;打个比方,你去找你同学,你知道你同学在XX班,然后你就去了XX班,然后你就根据你同学的样子找到了他。你同学的“样子”类似于程序的“端口”。你通过你同学所在班级和你同学的样子找到了你同学,那么你连接服务器就是你找到了服务器所在的计算机之后再通过端口连接了你要的服务器。

      1.4.2 服务器端为何不用写IP地址呢,原因很简单,服务器是让别的程序来找他的。只要s端设置自己的端口是什么(端口不能有突),客户端就会在这台计算机上找到服务器了。

  1.5 客户端和服务器之间建立联系:Socket与Socket之间的连接,客户端发送数据:socket.send();服务器端接收数据:Socket s = serverSocket.accept(); 一般都是先开服务器等待接收客户端的发送的数据的。一旦客户端和服务器端连接上了,那么两者之间就会形成一条“双向的管道”,客户端和服务器端的数据就是通过这个管道进行数据传输的,既然是双向的,那么c端可以向s端发数据,s端也可以向c端发送数据

  1.6 数据已什么形式发送?————流!socket.getInputStrem()和socket.getOutputStream()形成一收一发的态势。我开始很纳闷,为什么这两个流这样子就可以传输了呢?因为c端和s端通过socket来建立连接了,发送地和接受地就只是这两端的Socket了,这两个流不在两个建立好的管道之间流,还能往哪流呢?最后只是你想把接收到的流怎么处理罢了。

  1.7 多个客户端与一个服务器端的连接:如果有多个客户端的话就意味着有多个客户端Socket,所以也要在服务器端建立多个Socket和c端的Socket进行连接,形成各自c端和s端的管道。这样的话s端就要多次调用accept()方法了。

(完)

Java网络编程(二)关于Socket的一些个人想法的更多相关文章

  1. Java网络编程二:Socket详解

    Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...

  2. C#网络编程二:Socket编程

    一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...

  3. Linux 网络编程二(Socket创建)

    TCP通信 一个程序使用套接字需要执行4个步骤. --分配套接口和初始化 --连接 --发送或接收数据 --关闭套接字 涉及到的调用包括socket.bind.listen.connect(阻塞线程) ...

  4. Java 网络编程(二)

    以下例开始本文的内容: 例1,需求:上传图片. 客户端: 服务端点. 读取客户端已有的图片数据. 通过socket输出流将数据发给服务端. 读取服务端反馈信息. 关闭. class PicClient ...

  5. Java网络编程:什么是Socket编程?

    所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 我们开发的网络应用 ...

  6. Java网络编程二--基于UDP的编程

    DatagramSocket对象为基于UDP协议的Socket 构造器提供可以选择性绑定到指定端口和ip 创建完对象后调用:receive(DatagramPacket p) send(Dategra ...

  7. Java网络编程二

    向web站点发送get post请求,并从web站点取得响应 通相应的set方法,在调用connect()方法前,可以设置请求的各种参数,实现同浏览器类似的访问,调用connect()后可以调用相应的 ...

  8. 如何使用socket进行java网络编程(二)

    通过在如何使用socket进行java网络编程(一)中程序的编写,可以总结出一些常用的java socket编程的范例来. ServerSocket server = new ServerSocket ...

  9. java网络编程socket解析

    转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在 ...

  10. day05 Java网络编程socket 与多线程

    java网络编程 java.net.Socket Socket(套接字)封装了TCP协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过 它获取两个流(一个输入一个输出),然后使用这两个流的 ...

随机推荐

  1. Ubuntu再图形登录中以root的身份进入???

    Ubuntu再图形登录中以root的身份进入??? 这样做的需求,应该就是,可以再图形页面以root的身份进行图形化操作,比较方便更改配置文件. 1. 可以实现,但是不建议这么做,之后会出现一个警告提 ...

  2. javaWeb项目中到底什么是单例,多例

    你用杯子喝可乐,喝完了不刷,继续去倒果汁喝,就是单例.你用杯子喝可乐,直接扔了杯子,换个杯子去倒果汁喝,就是多例. 数据库连接池就是单例模式,有且仅有一个连接池管理者,管理多个连接池对象. 1. 什么 ...

  3. 浏览器缓存和Service Worker

    浏览器缓存和Service Worker @billshooting 2018-05-06 字数 6175 Follow me on Github 标签: BOM 1. 传统的HTTP浏览器缓存策略 ...

  4. eclipse-->run as --> maven test 中文乱码

    其有一个配置参数forkMode,默认为once,即表示每次运行test时,新建一个JVM进程运行所有test. 这可能会导致乱码问题.首先将forkMode设置为never,即不新建.再运行mvn ...

  5. 查找 SQL SERVER 所有表记录数

    -- 所有表的记录数 SELECT a.name, b.rowsFROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.idWHERE ...

  6. AngularJs2 构建简单的英雄编辑器

    参考上一篇文章的步骤,重新把相关环境准备.目录结构走一遍. 这一次我们要开始创建真正的Angularjs项目了. 显示我们的英雄 我们要在应用中显示英雄数据 我们来为 AppComponent 添加两 ...

  7. C#List的创建例程

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. Js异常捕获

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. django系列8.3.2--django中间件实现登录验证(2) 个人构想逻辑

    middleware.py from django.utils.deprecation import MiddlewareMixin from django.shortcuts import rend ...

  10. 关于Collections的操作方法

    Collections是一个包装类,其中包含有各种有关集合操作的静态多态方,比如可以作用在List和Set上,此类不能实例化. 排序 Integer[] array = new Integer[]{3 ...