JAVA TCP通信 Socket-ServerSocket类

1. UDP、TCP协议

java.net 包中包含提供了一些类和接口完成低层次的通信细节。我们可以直接使用这些类和接口,来专注于网络程序开发,而不用考虑通信的细节。

java.net 包中提供了两种常见的网络协议的支持:

  • UDP:用户数据报协议(User Datagram Protocol)。UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。

    由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

    但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。

数据报(Datagram):网络传输的基本单位

  • TCP:传输控制协议 (Transmission Control Protocol)。TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。

    在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。

    • 三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
      • 第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
      • 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
      • 第三次握手,客户端再次向服务器端发送确认信息,确认连接。整个交互过程如下图所示。

在这里插入图片描述

​ 完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等。

2. TCP通信Java实现

TCP通信能实现两台计算机之间的数据交互,通信的两端,分为客户端(Client)与服务端(Server)。

两端通信时步骤:

  1. 服务端程序,需要事先启动,等待客户端的连接。
  2. 客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。

在Java中,提供了两个类用于实现TCP通信程序:

  1. 客户端:java.net.Socket 类表示。创建Socket对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。
  2. 服务端:java.net.ServerSocket 类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。

2.1 Socket类

Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。

构造方法

  • public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。如果指定的host是null ,则相当于指定地址为回送地址。

    Tips:回送地址(127.x.x.x) 是本机回送地址(Loopback Address),主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输。

构造示例:

Socket client = new Socket("127.0.0.1", 6666);

成员方法

  • public InputStream getInputStream() : 返回此套接字的输入流。

    • 如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。
    • 关闭生成的InputStream也将关闭相关的Socket。
  • public OutputStream getOutputStream() : 返回此套接字的输出流。

    • 如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。
    • 关闭生成的OutputStream也将关闭相关的Socket。
  • public void close() :关闭此套接字。

    • 一旦一个socket被关闭,它不可再使用。
    • 关闭此socket也将关闭相关的InputStream和OutputStream 。
  • public void shutdownOutput() : 禁用此套接字的输出流。

    • 任何先前写出的数据将被发送,随后终止输出流。

2.2 ServerSocket类

ServerSocket类:这个类实现了服务器套接字,该对象等待通过网络的请求。

构造方法

  • public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,参数port就是端口号。

构造举例,代码如下:

ServerSocket server = new ServerSocket(6666);

成员方法

  • public Socket accept() :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法会一直阻塞直到建立连接。

3. 简单应用

服务端实现:

public class ServerTCP {
    public static void main(String[] args) throws IOException {
        System.out.println("开启服务");
        ServerSocket server = new ServerSocket(8888);
        Socket accept = server.accept();
        //接收信息
        InputStream is = accept.getInputStream();
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println("收到客户端消息:"+new String(bytes, 0, len));

        //回写信息
        System.out.println("回写信息...");
        OutputStream os = accept.getOutputStream();
        os.write("收到谢谢!".getBytes());
        accept.close();
        server.close();
    }
}

客户端实现:

public class ClientTCP {
    public static void main(String[] args) throws IOException {
        System.out.println("向服务器发送数据");
        Socket client = new Socket("127.0.0.1", 8888);
        OutputStream os = client.getOutputStream();
        os.write("你好,服务器!".getBytes());

        InputStream is = client.getInputStream();
        byte[] bytes = new byte[1024];
        int len =  is.read(bytes);
        System.out.println("收到服务器信息:"+new String(bytes, 0, len));
        client.close();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中的SocketServerSocket是基于TCP协议实现的网络编程,用于在网络上建立连接、传输数据和关闭连接。Socket用于客户端,ServerSocket用于服务器端。下面对它们的使用进行分析和总结。 1. Socket使用 Socket提供了一些方法用于建立连接、发送数据和关闭连接,其中常用的方法包括: - Socket(String host, int port):构造一个新的Socket对象,并连接到指定的主机和端口。 - getInputStream()和getOutputStream():分别返回Socket的输入和输出流,用于读取和写入数据。 - close():关闭Socket连接。 在使用Socket时,需要注意以下几点: - Socket对象的创建和关闭应该在同一个线程中完成,避免出现资源竞争和线程安全的问题。 - Socket连接建立后,需要及时关闭连接,避免出现资源占用和安全隐患。 2. ServerSocket使用 ServerSocket用于在服务器端监听客户端连接请求,并创建Socket对象进行通信。常用的方法包括: - ServerSocket(int port):创建一个新的ServerSocket对象,并监听指定端口上的连接请求。 - accept():接受客户端的连接请求,并返回一个新的Socket对象,用于与客户端进行通信。 - close():关闭ServerSocket对象。 在使用ServerSocket时,需要注意以下几点: - ServerSocket对象应该在程序启动时创建,而不是每次处理连接请求时都创建一个新的ServerSocket对象。 - ServerSocket对象只需要监听一次,即可接受多个客户端的连接请求。 - ServerSocket对象的关闭应该在所有客户端连接都关闭后进行。 总的来说,SocketServerSocketJava中基于TCP协议实现的网络编程,使用起来需要注意线程安全、资源释放、异常处理等问题。熟练掌握它们的使用,可以帮助我们开发出高效、稳定的网络应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值