java中进行socket编程实现tcp、udp协议总结

socket编程

1,计算机进行通信编程的基础是有ip地址加端口号的主机唯一标示、有相应的一致的协议即tcp/ip。ip地址用来区分主机,端口号用来区分计算机上不同的应用软件。

2,java提供的网络功能主要有四大类  

  1)InetAddress类,封装ip地址代表网络上的硬件资源。  

  2)URL,统一资源定位符

  3)Sockets:使用tcp协议实现网络通信的Socket相关类  

  4)Datagram:使用udp协议,将数据保存在数据报中通过网络进行通信的相关类。

3,InetAddress

  该类需要通过静态方法InetAddress.getLocalHost()得到实例。 提供了得到主机名,ip地址等的方法,具体可查api文档。该类可以得到本地主机和远程主机的相关硬件信息。

4,URL

  类似这种的字符串叫url,利用该类可以得到url中的各种详细信息,见代码:

5,Socket类和ServerSocket类实现tcp连接

  基本原理是通过ServerSocket启动监听程序,Socket发起请求建立连接,并通过绑定在两个对象上的InputStream,OutputSteam流来交换数据。

  练习实例思路:

  1)建立服务器端监听程序并绑定端口,ServerSocket serverSocket = new ServerSocket(8888);  循环监听程序,若有accept() 方法监听到客户端连接,建立socket连接,并启动响应线程。

  2)建立客户端程序,向服务器发送连接请求。Socket socket=new Socket("localhost", 8888);得到此socket上的输出流,并封装成打印流,向服务器发送字符消息。

  3)编写服务器端响应的多线程处理程序ServerThread,此类为自己编写非api,使用服务端建立的套接字通道,接收客户端数据,并根据内容回复。

  总结: 1)ServerSocket的accept方法得到连接后返回一个Socket对象,即为对等客户端的连接通道。服务端会有很多Socket对象。

      2)服务器端需要一个实现多线程的处理类,来并发的处理多个客户端的请求。

        3)代码详见程序。

6,通过DatagramPacket、DatagramSocket类实现UDP通信。

  其中DatagramPacket表示udp通信的数据报类,通过构造方法可以将通信信息和要发送的地址保存到类中;DatagramSocket表示一次端到端的通信,传入DatagramPacket信息,DatagramSocket的send方法表示发送。receive方法表示接收,并且是阻塞式的在得到数据报发入前不会进行任何操作!

7,整体总结

  1)不管是tcp还是udp服务器端肯定需要多线程,要注意设置线程优先级提高性能。

  2)tcp中,关闭了socket中的输出流,则socket也关闭了,因此,可在连接中不关流,在确定没有输出输入的时候再关闭socket;

  3)可不传输字符串,而使用ObjectInputStream和ObjectOutputStream传输对象

  4)结合io流的基本用法,可以用通讯类在不同的机器间发送文件。

  5) 两个协议实现中receive方法和accept方法均为阻塞式的。

原文地址:https://www.cnblogs.com/sunqian/p/5223897.html