学科分类
目录
Java基础

简单的TCP网络程序

通过前面两个小节的讲解,了解了ServerSocket、Socket类的基本用法,为了让初学者更好地掌握这两个类,接下来通过一个TCP通信的案例来进一步学习这两个类的基本使用。

要实现TCP通信需要创建一个服务器端程序和一个客户端程序,为了保证数据传输的安全性,首先需要实现服务器端程序,如文件1所示。

文件1 TCPServer.java

 1    import java.io.*;
 2    import java.net.*;
 3    // TCP服务端
 4    public class TCPServer {
 5        public static void main(String[] args) throws Exception {
 6            // 创建指定端口号为7788的服务端ServerSocket对象
 7            ServerSocket serverSocket = new ServerSocket(7788); 
 8            while (true){
 9                // 调用ServerSocket的accept()方法开始接收数据
 10                Socket client= serverSocket.accept(); 
 11                System.out.println("与客户端连接成功,开始进行数据交互!");
 12                // 获取客户端的输出流对象
 13                OutputStream os = client.getOutputStream();
 14                // 当客户端连接到服务端时,向客户端输出数据
 15                os.write(("服务器端向客户端做出响应!").getBytes()); 
 16                // 模拟与客户端交互耗时
 17                Thread.sleep(5000);
 18                // 关闭流和Socket连接
 19                os.close();
 20                client.close();
 21            }
 22        }
 23    }

运行结果如图1所示。

图1 运行结果

文件1中,创建了一个服务器端程序,用于接收客户端发送的数据。在创建ServerSocket对象时指定了服务器端的端口号为7788,并在while循环中调用该对象的accept()方法持续监听客户端连接。其中,在执行accept()方法时,程序会发生阻塞,直到有客户端来访问时才会结束这种阻塞状态同时会返回一个Socket类型的对象用于表示客户端,通过该对象可以获取与客户端关联的输出流并向客户端发送信息,同时执行Thread.sleep(5000)语句模拟服务器端与客户端交互占用的时间。最后,调用Socket对象的close()方法将通信结束。

完成了服务器端程序的编写,接下来编写客户端程序,如文件1所示。

文件1 TCPClient.java

 1    import java.io.*;
 2    import java.net.*;
 3    // TCP客户端
 4    public class TCPClient {
 5        public static void main(String[] args) throws Exception {
 6            // 创建一个Socket并连接到指定的服务器端
 7            Socket client = new Socket(InetAddress.getLocalHost(),7788);
 8            // 获取服务端返回的输入流数据并打印
 9            InputStream is = client.getInputStream(); 
 10            byte[] buf = new byte[1024]; 
 11            int len = is.read(buf);
 12            while (len != -1){
 13                System.out.println(new String(buf, 0, len)); 
 14                len = is.read(buf);
 15            }
 16            // 关闭流和Socket连接
 17            is.close();
 18            client.close(); // 关闭Socket对象,释放资源
 19        }
 20    }

运行结果如图1所示。

图1 运行结果

文件1中,创建了一个客户端程序,用于向指定服务端发送连接并进行数据交互。在客户端创建Socket对象与服务器端建立连接后,会打印出“服务器端向客户端做出响应”,如图1所示。

同时,文件1中的服务端程序结束了阻塞状态,会打印出“与客户端连接成功,开始进行数据交互!”,如图2所示。

图2 运行结果

点击此处
隐藏目录