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. java并发编程实战:第十章----避免活跃性危险

    在安全性和活跃性之间通常存在着某种制衡 一.死锁 定义:在线程A持有锁L并想获得锁M的同时,线程B持有锁M并尝试获得锁L,线程AB均不会释放自己的锁,那么这两个线程将永远地等待下去 在数据库系统的设中 ...

  2. Ubuntu的常识使用了解3

    打包与压缩

  3. (轉)CSS 单行溢出文本显示省略号...的方法(兼容IE FF)

    轉自:http://www.cnblogs.com/hlz789456123/archive/2009/02/18/1392972.html html代码:<div><p>&l ...

  4. SqlServer获取字符串中数字,中文及字符部分数据

    --获取英文字符数据 Create function [dbo].[Fun_GetChar] ( ) ) ) AS BEGIN BEGIN ,'') --删掉一个非数字的字符,循环结束,剩余的为数字部 ...

  5. day 20 02 模块的导入

    day 20 02  模块的导入 1.模块:就是一个文件:放置一些通用的有独立功能程序或者函数.比如建立一个py文件,文件名为:demo,文件里面的内容:demo模块: print('嗨大米')def ...

  6. iOS Facebook SDK

    iOS 使用 Facebook SDK 可以登录,分享,发布通知(Notifications)等. 首先下载 Facebook SDK.然后在 Facebook Developer 上注册自己的 ap ...

  7. C#写入文件

    using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\testDir\test2.txt", t ...

  8. Mysql 优化与测试

    由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 :  --> 点击这里 以下的测试数据根据环境的不同所耗费的时间有所不同,例如我在腾讯云上的测试 ...

  9. Stacking方法详解

    集成学习方法主要分成三种:bagging,boosting 和 Stacking.这里主要介绍Stacking. stacking严格来说并不是一种算法,而是精美而又复杂的,对模型集成的一种策略. 首 ...

  10. 516. Longest Palindromic Subsequence

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...