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

所属分类: 软件编程 / java 阅读数: 55
收藏 0 赞 0 分享

一.服务端代码:

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 中文参考手册》,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Java基于反射机制实现全部注解获取的方法示例

这篇文章主要介绍了Java基于反射机制实现全部注解获取的方法,结合实例形式分析了java反射机制获取注解的具体实现方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 信号量Semaphore的实现

这篇文章主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

eclipse+maven+spring mvc项目基本搭建过程

这篇文章主要介绍了eclipse+maven+spring mvc项目基本搭建过程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring boot集成swagger2生成接口文档的全过程

这篇文章主要给大家介绍了关于Spring boot集成swagger2生成接口文档的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Java冒泡排序法和选择排序法的实现

这篇文章主要介绍了Java冒泡排序法和选择排序法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Cloud Alibaba教程之Sentinel的使用

这篇文章主要介绍了Spring Cloud Alibaba教程之Sentinel的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Josephus环的四种解法(约瑟夫环)基于java详解

这篇文章主要介绍了Josephus环的四种解法(约瑟夫环)基于java详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java继承Thread类创建线程类示例

这篇文章主要介绍了Java继承Thread类创建线程类,结合实例形式分析了java线程操作相关使用技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java使用Callable和Future创建线程操作示例

这篇文章主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

springBoot使用JdbcTemplate代码实例

这篇文章主要介绍了springBoot使用JdbcTemplate代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多