java模拟tcp服务端,并用cmd进行端口测试
该tcp服务模拟定时向客户端发送字符串,同时客户端可以向服务端发送数据,客户端采用cmd中的telnet来访问
注意:采用cmd发送信息时只能接收单个字母字符,不能接收中文
用java写的接收端可以发送中文和正串字符。
网址:https://blog.csdn.net/weixin_44384605/article/details/122496500
一、创建tcp
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class TcpServer {
public static void main(String[] args) throws Exception {
//服务端端口号(自定义即可,取值范围0-65535)
ServerSocket ss = new ServerSocket(30311);
System.out.println("启动服务器....");
Socket s = ss.accept();
//发送数据
//定时器 5秒发送一次
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
} catch (IOException e) {
e.printStackTrace();
}
try {
//随机生成6位数(发送内容)
String code = "";
Random random = new Random();
for (int i = 0; i < 6; i++) {
code += String.valueOf(random.nextInt(10));
}
System.out.println(code);
bw.write(code);
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}, 1000, 5000);
// 获取客户端发送的数据(在cmd上每次只能接收一个字节)
while (true) {
//获取客户端发送数据(在cmd上只能一个一个字节获取)
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys); //未读到前阻塞
String comment = new String(bys, 0, len);
//获取客户端ip地址
//String ip = s.getInetAddress().getHostAddress();
//System.out.println("客户端ip地址:"+ip);
//打印客户端发送的数据
System.out.println("客户端发送内容:"+comment);
//输入c系统自动结束
if (comment.equals("c")) {
//结束定时器
timer.cancel();
//结束tcp
ss.close();
System.out.println("TCP Process End!!!!");
//跳出while循环,结束main
break;
}
}
}
}
二、cmd测试
1.启动main方法后在cmd输入ip和端口号(telnet提示不是内部命令请百度解决,很简单)
命令:telnet 127.0.0.1 30311
2.请求成功进入后服务端开始随机发送六位数
3.客户端发送字母后台可打印输出
4.客户端输入c可结束tcp链接测试