Java Socket编程实例(一)- TCP基本使用
作者:kingxss 发布时间:2023-11-11 08:42:50
标签: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 中文参考手册》,也希望大家多多支持脚本之家。


猜你喜欢
- 目录一、有效的线程1. 如何使用后台线程以避免前台负载过荷?2.如何避免应用不响应ANR?3. 如何在分离的线程中初始化查询?4.其他二、设
- 在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将View
- Java Tess4J实现图像识别最近需要用Java做一个图像识别的东西,查了一些资料,在此写一个基于Tess4J的教程,方便其他人参考和使
- 目录前言1、创建一个控制台应用程序2、编写测试代码并分析3、总结前言对于C#里面的Foreach学过 语言的人都知道怎么用,但是其原理相信很
- 前言在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawArc()的用法、参数含义及画图原理很是不理解,
- 本文实例讲述了C#使用二分查找法判断指定字符的方法。分享给大家供大家参考,具体如下:private int sort_init(ref st
- 如何解决某个节点故障的问题?如何解决数据一致性的问题?如何解决数据倾斜的问题?CAP理论先从定义开始:C(Consistence):一致性所
- 了解了inbound事件的传播过程, 对于学习outbound事件传输的流程, 也不会太困难outbound事件传输流程在我们业务代码中,
- 简述在学着使用Java的命令行来编译java文件的时候,遇到了这个问题Windows操作系统报错“‘
- C/C++ 左移<<, 右移>>作用1. 左移 <<取两个数字,左移第一个操作数的位,第二个操作数决定要
- 我就废话不多说了,大家还是直接看代码吧~import java.util.concurrent.ExecutorService; impor
- 实例如下:private void Form1_Load(object sender, EventArgs e)
- 芬兰数学家因卡拉花费3个月设计出了世界上迄今难度最大的数独游戏,而且它只有一个答案。因卡拉说只有思考能力最快、头脑最聪明的人才能破解这个游戏
- 闲来无事,用C++做了一个图书管理系统,主要有借书、还书、图书管理、用户管理等功能,主要用到的技术有容器和文件,以及类的封装#include
- 针对将特定端口加入到windows系统的防火墙中,使其允许或禁止通过防火墙。其大概思路是:/// <summary> /// 添
- Java 字节码以二进制的形式存储在 .class 文件中,每一个 .class 文件包含一个 Java 类或接口。Javaassist 就
- mybatis-plus 查询传入参数Map,返回List<Map>原因有时实体类属性不够用,又不想写自定义VO了,所以用map
- 一、概述本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函
- Java 切割字符串的几种方式//以data 为案例参数。String data = "2019-01-
- 前言socket是软件之间通讯最常用的一种方式。c#实现socket通讯有很多中方法,其中效率最高就是异步通讯。异步通讯实际是利用windo