JAVA学习-网络编程.TCP

        TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它在Java网络编程中被广泛应用。TCP通信可以确保数据的可靠传输,并且具有一定的顺序性。

一、Java中实现TCP通信主要有以下几种方式:

1. Socket类:

Socket类是Java提供的最基本的用于实现TCP通信的类。通过Socket类可以创建客户端和服务器端的Socket,并通过输入输出流进行数据的传输。

2. ServerSocket类:

ServerSocket类用于在服务器端监听客户端的连接请求,并创建Socket对象与客户端进行通信。

3. NIO(New I/O):

Java提供了NIO用于实现更高效的IO操作。NIO中的Channel和Buffer可以实现非阻塞的网络通信,提高了系统的吞吐量和响应性能。

二、TCP通信的特点包括:

1. 面向连接:

TCP通信使用三次握手建立连接,并且在通信过程中保持连接状态,确保数据的可靠传输。

2. 可靠性:

TCP协议通过序号和确认应答机制保证数据的可靠传输,并且自动重传丢失的数据。

3. 有序性:

TCP协议保证数据按照发送的顺序进行传输,不会出现乱序的情况。

三、使用TCP通信的基本步骤如下:

1. 服务器端创建ServerSocket对象,并指定端口号。

2. 服务器端调用accept()方法监听客户端的连接请求。

3. 客户端创建Socket对象,并指定服务器端的IP地址和端口号。

4. 服务器端与客户端建立连接后,通过输入输出流实现数据的传输。

5. 客户端向服务器端发送请求数据,服务器端接收并处理请求。

6. 服务器端向客户端返回响应数据,客户端接收并处理响应。

四、与其他通信方式相比,TCP通信具有以下优点:

1. 可靠性:

TCP协议使用确认应答机制和重传机制,可以确保数据的可靠传输。

2. 有序性:

TCP协议保证数据按照发送的顺序进行传输,不会出现乱序的情况。

3. 流式传输:

TCP协议可以将数据分成小块进行传输,无需关心数据的大小。

4. 支持双向通信:

TCP通信可以实现客户端和服务器端的双向通信。

五、高级应用中,可以使用多线程实现多个客户端同时与服务器端进行通信,也可以通过使用NIO提高网络通信的性能和并发能力。

以下是一个简单的TCP通信示例代码:

服务器端代码:

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) {
        try {
            // 创建ServerSocket对象并绑定端口号
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("服务器已启动,等待客户端连接...");

            // 监听客户端的连接请求
            Socket clientSocket = serverSocket.accept();

            // 获取输入流,用于接收客户端发送的数据
            InputStream is = clientSocket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);

            // 获取输出流,用于向客户端发送数据
            OutputStream os = clientSocket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);

            // 接收客户端发送的数据
            String data = br.readLine();
            System.out.println("客户端发送的数据:" + data);

            // 向客户端发送响应数据
            pw.println("Hello, I'm server!");
            pw.flush();

            // 关闭流和Socket连接
            pw.close();
            os.close();
            br.close();
            isr.close();
            is.close();
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端代码:

import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        try {
            // 创建Socket对象并指定服务器端的IP地址和端口号
            Socket socket = new Socket("localhost", 8888);

            // 获取输入流,用于接收服务器端发送的数据
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);

            // 获取输出流,用于向服务器端发送数据
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);

            // 向服务器端发送数据
            pw.println("Hello, I'm client!");
            pw.flush();

            // 接收服务器端发送的数据
            String data = br.readLine();
            System.out.println("服务器发送的数据:" + data);

            // 关闭流和Socket连接
            pw.close();
            os.close();
            br.close();
            isr.close();
            is.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

        以上代码实现了一个简单的TCP通信示例,服务器端监听客户端的连接请求,接收客户端发送的数据并返回响应,客户端与服务器端建立连接后,发送数据,并接收服务器的响应。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值