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. DE0-Nano-SoC开发板诡异的电源电路方案设计分析

    这些日子一直在设计自己的Cyclone V SoC开发板,由于我们这种散兵游勇,是断然没有厂家和代理技术支持的,因此只能找各种现成方案参考.其实Cyclone V SoC芯片的外围电路设计不难,无非就 ...

  2. Could not load file or assembly 'System.Data.SQLite ... 试图加载格式不正确的程序

    坑爹的System.Data.SQLite. 先给出下载地址:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki ...

  3. handsontable-常用配置

    冻结单元格 var //自动创建数据 myData = Handsontable.helper.createSpreadsheetData(100, 50), container = document ...

  4. REQUEST的TRACE文件

    --REQUEST的TRACE文件 SELECT    'Trace Name: '       || DEST.VALUE       || '/'       || LOWER (DBNM.VAL ...

  5. Blend 2015 教程 (五) 自定义状态

    本篇再补充一块内容,就是自定义状态的介绍. 自定义状态用于封装用户控件在各种状态之间切换时的外观变化及其动画效果,方便调用.比如有个用户控件用于实现类似舞台幕布打开和关闭切换的效果,可以创建幕布关闭和 ...

  6. [python01] python列表,元组对比Erlang的区别总结

    数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字,字符,甚至可以是其他的数据结构. python最基本的数据结构是sequence(序列):6种内建的序列:列表,元组,字符串, ...

  7. SQL LEAD()函数 LAG()函数

    lag ,lead 分别是向前,向后:lag 和lead 有三个参数,第一个参数是列名,第二个参数是偏移的offset,第三个参数是 超出记录窗口时的默认值) SQL> select id,na ...

  8. UDP实现一个简易的聊天室 (Unity&&C#完成)

    效果展示(尚未完善) UDP User Data Protocol 用户数据报协议 概述 UDP是不连接的数据报模式.即传输数据之前源端和终端不建立连接.使用尽最大努力交付原则,即不保证可靠交付. 数 ...

  9. .net core 自制错误日志

    前言 之前.net framework用的ErrorLog帮助类,对于监控错误形成日志,内容非常清晰,想在.net core2.2中继续用,但是有很多不一样的地方,所以想总结一下. 首先需要HttpC ...

  10. WCF实现进程间管道通信Demo

    一.代码结构: 二.数据实体类: using System; using System.Collections.Generic; using System.Linq; using System.Run ...