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 中文参考手册》,也希望大家多多支持脚本之家。
相关文章
RestTemplate实现多种底层HTTP客户端类库的切换用法
这篇文章主要为大家详细的讲解了RestTemplate实现多种底层HTTP客户端类库的切换示例,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步2022-03-03MyBatisPlus PaginationInterceptor分页插件的使用详解
这篇文章主要介绍了MyBatisPlus PaginationInterceptor分页插件的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-03-03MyBatis-Plus与Druid结合Dynamic-datasource实现多数据源操作数据库的示例
Dynamic-DataSource 可以和绝大多是连接层插件搭配使用,比如:mybatis,mybatis-plus,hibernate等,本文就来介绍一下MyBatis-Plus与Druid结合Dynamic-datasource实现多数据源操作数据库的示例,感兴趣的可以了解一下2023-10-10
最新评论