千家信息网

TCP Socket如何使用

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"TCP Socket如何使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"TCP Socket如何使用"吧!Java为TCP协议提
千家信息网最后更新 2025年11月08日TCP Socket如何使用

这篇文章主要讲解了"TCP Socket如何使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"TCP Socket如何使用"吧!

Java为TCP协议提供了两个类,分别在客户端编程和服务器端编程中使用它们。在应用程序开始通信之前,需要先创建一个连接,由客户端程序发起;而服务器端的程序需要一直监听着主机的特定端口号,等待客户端的连接。在客户端中我们只需要使用Socket实例,而服务端要同时处理ServerSocket实例和Socket实例;二者并且都使用OutputStream和InpuStream来发送和接收数据。

学习一种知识***的方式就是使用它,通过前面的笔记,我们已经知道如何获取主机的地址信息,现在我们通过一个简单的程序来初步学习传输层使用了TCP协议的Socket编程。

TCP服务器端

在Socket编程中,服务器端远比客户端要复杂得多。服务器端的工作就是建立一个通信终端,被动的等待客户端的连接。下面这个服务器端程序的示例的作用是:监听从控制台输入获取的端口号,并且将客户端发送过来的消息,再发送回去。

import java.net.*;   import java.text.MessageFormat;   import java.io.*;      public class TCPEchoServer {          private static final int BUFSIZE = 32;          /**        * @param args    */      public static void main(String[] args) throws IOException {           // TODO Auto-generated method stub    // 从控制台获取需要监听的端口号           if (args.length != 1)               throw new IllegalArgumentException("Parameter(s):");           // 获取端口号           int servPort = Integer.parseInt(args[0]);           // 实例化一个ServerSocket对象实例           ServerSocket servSocket = new ServerSocket(servPort);           System.out.println(MessageFormat.format("开始启动监听,端口号:{0}", args[0]));              // 初始接收数据的总字节数           int recvMsgSize;           // 接收数据的缓冲区           byte[] receiveBuf = new byte[BUFSIZE];              // 循环迭代,监听端口号,处理新的连接请求           while (true) {               // 阻塞等待,每接收到一个请求就创建一个新的连接实例               Socket clntSocket = servSocket.accept();               // 获取连接的客户端的 SocketAddress               SocketAddress clientAddress = clntSocket.getRemoteSocketAddress();               // 打印输出连接客户端地址信息               System.out.println("Handling client at" + clientAddress);               // 从客户端接收数据的对象               InputStream in = clntSocket.getInputStream();               // 向客户端发送数据的对象               OutputStream out = clntSocket.getOutputStream();               // 读取客户端发送的数据后,再发送到客户端               while ((recvMsgSize = in.read(receiveBuf)) != -1) {                   out.write(receiveBuf, 0, recvMsgSize);               }               // 客户端关闭连接时,关闭连接               System.out.println(" 客户端关闭连接");               clntSocket.close();           }          }      }

TCP客户端

在Socket编程中,首先客户端需要向服务器端发送,然后被动的等待服务器端的响应。下面的示例中:我们向服务器端发送信息,等待服务器端发送的消息,并打印显示出来。

import java.io.*;   import java.net.Socket;   import java.net.SocketException;      public class TCPEchoClient {          /**        * @param args        * @throws IOException     */      public static void main(String[] args) throws IOException {           // TODO Auto-generated method stub    // 判断从控制台接受的参数是否正确           if ((args.length < 2) || (args.length > 3))               throw new IllegalArgumentException(                       "Parameter(s):[]]");           // 获取服务器地址           String server = args[0];           // 获取需要发送的信息           byte[] data = args[1].getBytes();           // 如果有三个从参数那么就获取发送信息的端口号,默认端口号为8099           int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 8099;           // 根据服务器地址和端口号实例化一个Socket实例           Socket socket = new Socket(server, servPort);           System.out.println("Connected to server...sending echo string");           // 返回此套接字的输入流,即从服务器接受的数据对象           InputStream in = socket.getInputStream();           // 返回此套接字的输出流,即向服务器发送的数据对象           OutputStream out = socket.getOutputStream();           // 向服务器发送从控制台接收的数据           out.write(data);           // 接收数据的计数器,将写入数据的初始偏移量           int totalBytesRcvd = 0;           // 初始化接收数据的总字节数           int bytesRcvd;           while (totalBytesRcvd < data.length) {               // 服务器关闭连接,则返回 -1,read方法返回接收数据的总字节数               if ((bytesRcvd = in.read(data, totalBytesRcvd, data.length                       - totalBytesRcvd)) == -1)                   throw new SocketException("与服务器的连接已关闭");               totalBytesRcvd += bytesRcvd;           }           // 打印服务器发送来的数据           System.out.println("Received:" + new String(data));           // 关闭连接           socket.close();          }      }

首先运行服务器端,监听8099端口:

接着运行客户端程序,并且向服务器端发送消息:

再次查看我们的服务器端控制台,我们可以看到前面客户端连接的地址信息:

感谢各位的阅读,以上就是"TCP Socket如何使用"的内容了,经过本文的学习后,相信大家对TCP Socket如何使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

服务 服务器 客户 客户端 数据 口号 实例 信息 程序 端的 地址 对象 控制台 学习 控制 监听 编程 字节 就是 消息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融与智能科技 黑色小队怎么调服务器 网络安全的威胁和风险是什么 软件开发怎么升级 兰州有没有做软件开发的公司 软件开发品牌四个字母 机电和计算机网络技术谁好 扫黄打非网络安全课手抄报 的哲学观审视 网络安全 免费的服务器版打卡软件 上海瀚途网络技术有限公司 估值 小学生网络安全教育平台登录 广广网络技术有限公司 怀柔区正规软件开发要求 数据库系统比文件系统 酒泉网络安全工程师年薪 烽火通信软件开发岗 网络安全应急演练直播 数据库词法分析语法分析 世界网络安全资讯网站 阿里数据库连接池 园区网网络技术架构演进 网络安全举报网址 朝阳区运营网络技术售后服务 福建网络技术转让技术指导 慈溪慈纵软件开发经营部 网络技术的基础应用 张掖网络安全技能大赛 数据库删除表怎样手动操作 数据网络软件开发是什么
0