java中的网络通讯编程之TCP篇

java中的网络通讯编程分为两种,一、TCP(传输控制协议)方式。二、UDP(用户数据报协议)方式。java

一、TCP(传输控制协议)方式
编程

使用这种网络通讯方式的时候,须要创建专门的虚拟链接,而后才能进行可靠的数据传输,若是数据传输失败,则客户端会自动重发该数据。服务器

二、UDP(用户数据报协议)方式。网络

这种方式就像是手机之间发送短信,无需创建专门的连接,可是传输也是不可靠的,若是短信发送失败的话,则服务端是收不到数据的。socket

这两种方式都是常常用到的,重要的数据通常都是采用tcp的方式来进行传输,大量的非重要数据能够采用udp的方式来进行传输,因为tcp须要创建链接并以及确认传输是否正确,因此它比udp要多花费一些时间,并且传输时,产生的数据量要比udp方式要大一些。tcp

总结一些tcp和udp的区别学习

UDP是一种不可靠的传输协议,它不能保证每次传输的数据包都是按次序到达的。spa

TCP是一种可靠的传输协议,它确保接受方彻底正确的接收了发送方发送的全部数据。.net

UDP传输数据的时候有大小限制,每一个数据报大小不能超过64KB。线程

TCP则没有限制,它们在socket之间按照统一的格式,传多少都没问题。

UDP不须要创建链接就能够传输数据,由于它所传输的数据报中都已经包含接收方完整的地址

TCP则否则,它必须创建连接,在socket之间传输必需要创建链接,全部它比UDP多了一个创建链接的时间。

UDP操做简单,TCP生命力强。


客户端网络编程

一、创建链接

创建链接的时候须要指定链接到服务器的ip地址和端口号,创建完成后就会造成一条虚拟链接,后面的交换数据就会经过这条链接来进行。

二、交换数据

交换链接的时候严格按照请求的响应模型,客户端将请求数据发送给服务端,服务端根据请求的数据做出相应的响应,将数据按照相应模型反馈给客户端。

三、关闭链接

当数据交换完成后,就会断开链接,释放端口、内存等资源。

步骤2能够根据业务逻辑的须要,重复进行。


服务端网络编程

一、监听端口

服务端所要作的就是监听本地的某个端口,这个端口就是服务端开放给客户端的端口。

二、获取链接

当服务端链接到服务端的时候,就会获取一个链接,链接中包含客户端的ip地址等信息,交换数据的时候就是经过此连接进行交换数据。每个链接都是由一个专门的线程独立处理该链接。

三、交换数据

服务端的交换数据的过程和客户端的不一样,服务端是先接受来自客户端的数据,在进行相应的逻辑处理后,将获得的数据发送给客户端。

四、关闭链接

交换完成后,就会关闭这个链接,同时释放其所监听的端口、内存等资源。


举例说明:

客户端
1) 创建Socket链接 
Socket socket1 = new Socket(“http://blog.csdn.net/jessonlv”,80);


2)按照“请求-响应”模型进行网络数据交换
在Java语言中,数据传输功能由Java IO实现,也就是说只须要从链接中得到输入流和输出流便可,而后将须要发送的数据写入链接对象的输出流中,在发送完成之后从输入流中读取数据便可。示例代码以下:
 OutputStream os = socket1.getOutputStream(); //得到输出流
 InputStream is = socket1.getInputStream();     //得到输入流
这里得到的只是最基本的输出流和输入流对象,还能够根据前面学习到的IO知识,使用流的嵌套将这些得到到的基本流对象转换成须要的装饰流对象,从而方便数据的操做。

3)关闭网络链接
 socket1.close();

public class Constants {  
  
    public static void main(String[] args) {  
        ServerSocket serverSocket = null;  
        Socket socket = null;  
        OutputStream os = null;  
        InputStream is = null;  
        // 监听端口号  
        int port = 10000;  
        try {  
            // 创建链接  
        serverSocket = new ServerSocket(port);  
            // 得到链接  
            socket = serverSocket.accept();  
            // 接收客户端发送内容  
            is = socket.getInputStream();  
            byte[] b = new byte[1024];  
            int n = is.read(b);  
            // 输出  
            System.out.println("客户端发送内容为:" + new String(b, 0, n));  
            // 向客户端发送反馈内容  
            os = socket.getOutputStream();  
            os.write(b, 0, n);  
        } catch (Exception e) {  
        e.printStackTrace();  
        } finally {  
            try {  
                // 关闭流和链接  
                os.close();  
                is.close();  
                socket.close();  
                serverSocket.close();  
            } catch (Exception e) {  
            }  
        }  
    }  
}  
相关文章
相关标签/搜索