步步测试完善Java中Socket通信图解法(一)

来源:互联网 发布:软件定制开发合同范本 编辑:程序博客网 时间:2024/05/19 13:21

目录


简介

Java中Socket通信简介

单线程一对一服务器1——>1客户端

单线程一对一服务器1<——>1客户端

多线程一对多服务器1<——>N客户端【非聊天室的服务器通过用户输入发送数据】

多线程一对多服务器1<——>N客户端【聊天室】

多线程最终服务器和客户端集成一体【swing程序】



    简介:
 
    无论是在Java语言还是C++语言中,初学一个知识点,通常一般都是在dos黑屏中运行。比如开始学习HelloWorld,我们都是在dos黑屏中掌握。
  虽然程序员不在乎设计语言,只要掌握其核心思想原理。但是学习两种语言后,发现对客户端程序很吃力,对窗体形式基础很薄弱。
  也许很多东西只有在控制台中运行即可。但是有些东西在dos黑屏中,确实很难理解或很难给人视觉理解。
  比如socket编程在这方面就是有很大的感触。在C++中dos中运行socket编程,始终无法理解服务器与客户端集成一体。但是结局是,人家在VC窗体中使用CScoket的确集成在一块了。(后来自己窗体中只是做了连接,初步理解服务器与客户端集成一体)。使用底层的winsock32,使用起来不不方便。需要初始化,加载,监听。连接等。(只是初步学者的感觉)但是无论是VC封装的CSocket,还是Java中封装的Socket,使用起来很方便。
 
  Java中Socket通信简介:

 

  那这篇博客就给大家介绍,Java中Socket通信。记录自己是如何一步步理解Socket。希望此博客能够解答像我这样初学者疑惑。
 
  TCP协议与UDP协议区别:
  TCP:安全可靠,不适合传输大数据量的数据。
  UDP:不安全可靠,适合传输大数据量的数据。
 
  对于安全与否,是说的TCP是基于三次握手协议。首先连接,判断对方是否在线或开启服务。然后发送数据,再次是回复收到的标识。
  而UDP而不需要监听,连接。无论对方是否在线或开启服务,直接发送数据。若对方收到数据,也不回复,这样,若丢包,大家都不知道。都以为对方收到了,或者反正发送了,后果怎么样,不管。至少我发送了。
   当然这是主要的区别。若想对两者协议具体区分,比如其中的报文长度什么的,这方面只是建议看看TCP/Ip详解这种类似的书籍。
 
   那Java中TCP协议中的socket通信如下图。我们在理解通信时,会区分服务器和客户端。但是最后,其实,没有说所谓的严格的服务器与客户端。但是为了好理解,我们先划分。
   TCP协议中的Socket通信。
    
     其中:服务器端是用ServerSocket来表示。客户端使用Socket。服务器初始化完毕后,等待客户端连接,若有客户端连接,则两者可以进行通信。两者通信是使用流的形式来表示。
 
     而UDP协议中的Socket通信。
     
     其中,根据UDP特性,其中服务器不需要监听,所以只要客户端连接,指定相应的服务器,则就可以正常交流。而交流的载体是通过DatagramPacket对象。因为DatagramPacket中包含要发送的目的地。