Java Socket编程实例(一)- TCP基本使用

 更新时间:2016年06月15日 09:09:21   作者:kingxss  
这篇文章主要讲解Java Socket编程中TCP的基本使用,希望能给大家做一个参考。

一.服务端代码:

import java.net.*; // for Socket, ServerSocket, and InetAddress 
import java.io.*; // for IOException and Input/OutputStream 
 
public class TCPEchoServer { 
 
  private static final int BUFSIZE = 32; // Size of receive buffer 
 
  public static void main(String[] args) throws IOException { 
 
    int servPort = 5500; 
 
    // Create a server socket to accept client connection requests 
    ServerSocket servSock = new ServerSocket(servPort); 
 
    int recvMsgSize; // Size of received message 
    byte[] receiveBuf = new byte[BUFSIZE]; // Receive buffer 
 
    while (true) { // Run forever, accepting and servicing connections 
      Socket clntSock = servSock.accept(); // Get client connection 
 
      SocketAddress clientAddress = clntSock.getRemoteSocketAddress(); 
      System.out.println("Handling client at " + clientAddress); 
 
      InputStream in = clntSock.getInputStream(); 
      OutputStream out = clntSock.getOutputStream(); 
 
      // Receive until client closes connection, indicated by -1 return 
      while ((recvMsgSize = in.read(receiveBuf)) != -1) { 
        out.write(receiveBuf, 0, recvMsgSize); 
      } 
 
      clntSock.close(); // Close the socket. We are done with this client! 
    } 
    /* NOT REACHED */ 
  } 
} 

二.客户端代码:

import java.net.*; 
import java.io.*; 
 
public class TCPEchoClient { 
 
  public static void main(String[] args) throws IOException { 
 
    String server = "127.0.0.1"; // Server name or IP address 
    int servPort = 5500; //// Server port 
    byte[] data = "Hi, World".getBytes(); 
 
    // Create socket that is connected to server on specified port 
    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); // Send the encoded string to the server 
 
    // Receive the same string back from the server 
    int totalBytesRcvd = 0; // Total bytes received so far 
    int bytesRcvd; // Bytes received in last read 
    while (totalBytesRcvd < data.length) { 
      if ((bytesRcvd = in.read(data, totalBytesRcvd, data.length - totalBytesRcvd)) == -1) 
        throw new SocketException("Connection closed prematurely"); 
      totalBytesRcvd += bytesRcvd; 
    } // data array is full 
 
    System.out.println("Received: " + new String(data)); 
    socket.close(); // Close the socket and its streams 
  } 
} 

上述代码的TCP服务端是单线程,一次只能服务一个客户端。

查看更多Java的语法,大家可以关注:《Thinking in Java 中文手册》、《JDK 1.7 参考手册官方英文版》、《JDK 1.6 API java 中文参考手册》、《JDK 1.5 API java 中文参考手册》,也希望大家多多支持脚本之家。

相关文章

  • SpringCloud微服务剔除下线功能实现原理分析

    SpringCloud微服务剔除下线功能实现原理分析

    SpringCloud是一种微服务的框架,利用它我们可以去做分布式服务开发,这篇文章主要介绍了SpringCloud微服务剔除下线功能,需要的朋友可以参考下
    2022-11-11
  • Java 高并发四:无锁详细介绍

    Java 高并发四:无锁详细介绍

    本文主要介绍Java 高并发无锁的知识,这里整理了 1.无锁类的原理详解 2.无锁类的使用的知识,并讲解其原理,有需要的小伙伴可以参考下
    2016-09-09
  • java 中如何获取字节码文件的相关内容

    java 中如何获取字节码文件的相关内容

    这篇文章主要介绍了java 中如何获取字节码文件的相关内容的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java获取客户端真实IP地址过程解析

    Java获取客户端真实IP地址过程解析

    这篇文章主要介绍了Java获取客户端真实IP地址过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • IntelliJ IDEA2020.3详细安装教程

    IntelliJ IDEA2020.3详细安装教程

    这篇文章主要介绍了IntelliJ IDEA2020.3详细安装教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Spring Boot 2.0.0 终于正式发布-重大修订版本

    Spring Boot 2.0.0 终于正式发布-重大修订版本

    北京时间 2018 年 3 月 1 日早上,如约发布的 Spring Boot 2.0 在同步至 Maven 仓库时出现问题,导致在 GitHub 上发布的 v2.0.0.RELEASE 被撤回
    2018-03-03
  • spring mvc实现登录账号单浏览器登录

    spring mvc实现登录账号单浏览器登录

    这篇文章主要为大家详细介绍了spring mvc实现登录账号单浏览器登录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • springboot整合mongodb并实现crud步骤详解

    springboot整合mongodb并实现crud步骤详解

    这篇文章主要介绍了springboot整合mongodb并实现crud,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • MyBatis-Plus中提供的各种注解详细说明

    MyBatis-Plus中提供的各种注解详细说明

    这篇文章主要介绍了MyBatis-Plus中提供的各种注解详细说明,下面对MyBatis-Plus提供的注解进行整理,本文提供了部分示例代码以方便理解,需要的朋友可以参考下
    2023-11-11
  • SpringBoot JPA sort多属性排序实例

    SpringBoot JPA sort多属性排序实例

    这篇文章主要介绍了SpringBoot JPA sort多属性排序实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论