socket编程 java
1,计算机进行通讯编程的基础是有ip地址加端口号的主机惟一标示、有相应的一致的协议即tcp/ip。ip地址用来区分主机,端口号用来区分计算机上不一样的应用软件。编程
2,java提供的网络功能主要有四大类 api
1)InetAddress类,封装ip地址表明网络上的硬件资源。 服务器
2)URL,统一资源定位符网络
3)Sockets:使用tcp协议实现网络通讯的Socket相关类 多线程
4)Datagram:使用udp协议,将数据保存在数据报中经过网络进行通讯的相关类。并发
3,InetAddress类socket
该类须要经过静态方法InetAddress.getLocalHost()获得实例。 提供了获得主机名,ip地址等的方法,具体可查api文档。该类能够获得本地主机和远程主机的相关硬件信息。tcp
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方法均为阻塞式的。