http://www.hackchina.com/r/149844/Telnet.java__html
其实网上关于java的telnet客户端比较多,客户端比如jta26,
服务端口比如pool woman‘s telnet server 简称pwts
有需要的同仁可以去搜索
import java.net.*;
import java.awt.*;
import java.io.*;
import java.lang.*;
import java.applet.*;
public class Telnet extends Applet
{
//属性
String hoststr, portstr; // 给定主机和端口参数
Panel controls;
TelnetClient tn; // telnet component
TextField hostfield;
TextField portfield;
Button connect, disconnect;
//初始化
public void init()
{
//创建接口
setLayout(new BorderLayout());
add("Center",tn = new TelnetClient());
add("North",controls = new Panel());
controls.setLayout(new FlowLayout());
controls.add(new Label("Host"));
controls.add(hostfield = new TextField());
controls.add(new Label("Port"));
controls.add(portfield = new TextField(5));
controls.add(connect = new Button("Connect"));
controls.add(disconnect = new Button("Disconnect"));
// 获取参数
String hoststr = getParameter("host");
String portstr = getParameter("port");
if (hoststr == null) return;
if (portstr == null) portstr = "23";
hostfield.setText(hoststr);
portfield.setText(portstr);
}
//启动线程
public void start()
{
tn.disconnect();
tn.connect(hostfield.getText(), Integer.parseInt(portfield.getText()));
}
//线程停止
public void stop()
{
tn.disconnect();
}
//线程动作
public boolean action(Event e, Object arg)
{
if (e.target == connect)
start();
else if (e.target == disconnect)
stop();
return true;
}
}
// TelnetClient
// 连接指定主机和端口
class TelnetClient extends Canvas implements Runnable
{
//属性
boolean debug = false; //debug标记
String host; // 远端主机
int port; // 端口
Socket s; // 连接
InputStream in; // 输入流
OutputStream out; // 输出流
Thread th; // 读入数据线程
Font fn; // 当前字体
Image back; // 背景图片
int x, y; // 鼠标参数
int chw,chh; // 字符大小
int chd; // 字符偏置
int width,height; // Applet大小
int w,h; // Applet大小 (in chars)
char ch[][]; // 显示的字符数组
Graphics gr,bgr; // 前后图片
String term = "dumb";
boolean echo; // 响应键
// reshape
// 绘制Telnet客户端组件大小
public void reshape(int nx, int ny, int nw, int nh)
{
if (nw != width || nh != height)
{
width = nw;
height = nh;
// 设置字体
gr = getGraphics();
gr.setColor(Color.black);
fn = new Font("Courier",Font.PLAIN,10);
if (fn != null) gr.setFont(fn);
FontMetrics fnm = gr.getFontMetrics();
chw = fnm.getMaxAdvance();
chh = fnm.getHeight();
chd = fnm.getDescent();
// 规划出绘制区域
h = nh / chh;
w = nw / chw;
ch = new char [w][h];
// 构造背景图片
back = createImage(width, height);
bgr = back.getGraphics();
bgr.setFont(fn);
bgr.setColor(Color.black);
clearch();
}
super.reshape(nx,ny,nw,nh);
}
// connect
//连接主机
void connect(String givenhost, int givenport)
{
host = givenhost;
port = givenport;
if (debug) System.out.println("Height = "+String.valueOf(h));
if (debug) System.out.println("Width = "+String.valueOf(w));
// 重新显示
clearch();
echo = true;
requestFocus();
// 打开连接
try
{
try
{
if ((s = new Socket(host,port)) == null)
{
display("Failed to connect to host "+host+"\n");
return;
}
}
catch(UnknownHostException e)
{
display("Host " + host + " not found\n");
return;
}
}
catch(IOException e)
{
display("Failed to connect to host "+host+"\n");
return;
}
try
{
in = s.getInputStream();
out = s.getOutputStream();
}
catch(IOException e)
{
if (debug) System.out.println("Failed to get stream from socket");
System.exit(5);
}
display("Connected to "+host+"\n");
if (debug) System.out.println("Connected to host");
// 读入数据
th = new Thread(this);
th.start();
}
// disconnect
// 关闭连接
void disconnect()
{
if (th != null)
{
display("\nDisconnected from "+host+"\n");
th.stop();
th = null;
s = null; in = null; out = null;
}
}
// clearch
// 清除字符数组重新设置游标
void clearch()
{
int i,j;
for(i=0; i<w; i++)
for(j=0; j<h; j++)
ch[i][j] = ' ';
x = y = 0;
bgr.setColor(Color.white);
bgr.fillRect(0, 0, width, height);
paint(gr);
}
// keyDown
// 点击按钮事件
public boolean keyDown(Event e, int k)
{
if (out != null)
{
int kp = e.key;
if (debug) System.out.println("Pressed key " + String.valueOf(kp));
transmitch((char)kp);
if (echo)
{
if (debug) System.out.println("Echo'd "+String.valueOf(kp));
displaych((char)kp);
}
}
return true;
}
// mouseDown
// 按动鼠标获得焦点
public boolean mouseDown(Event e, int x, int y)
{
requestFocus();
return true;
}
// paint
// 绘制图片
public void paint(Graphics g)
{
gr.drawImage(back,0,0,this);
}
// renderchar
// 阅读字符
void renderchar(char c, int x, int y, boolean back)
{
gr.setColor(Color.white);
gr.fillRect(x*chw, y*chh, chw, chh);
gr.setColor(Color.black);
gr.drawString(String.valueOf(c), x*chw, (y+1)*chh-chd);
if (back)
{
bgr.setColor(Color.white);
bgr.fillRect(x*chw, y*chh, chw, chh);
bgr.setColor(Color.black);
bgr.drawString(String.valueOf(c), x*chw, (y+1)*chh-chd);
}
}
// run
// 阅读和显示字符
public void run()
{
while(true) displaych(readch());
}
// readch
// 从另一个终端读入字符
char readch()
{
int c = 0;
try { c = in.read(); }
catch(IOException e)
{ shutdown();}
if (c == -1) shutdown();
if (debug) System.out.println("Got char "+String.valueOf(c)+" = "+String.valueOf((char)c));
return (char)c;
}
// shutdown
// 中断连接
void shutdown()
{
display("\nConnection closed\n");
s = null; in = null; out = null;
Thread.currentThread().stop();
}
// display
// 在Telnet窗口显示字符串
void display(String str)
{
int i;
for(i=0; i<str.length(); i++)
displaych(str.charAt(i));
}
// displaych
// 在当前鼠标位置显示一个字符
void displaych(char c)
{
if (c == '\n')
{
// 新行
renderchar(ch[x][y], x, y, false); // erase cursor
x = 0;
if (y == h-1)
{
gr.copyArea(0, chh, w*chw, (h-1)*chh, 0, -chh);
gr.setColor(Color.white);
gr.fillRect(0, (h-1)*chh, width, chh);
bgr.copyArea(0, chh, w*chw, (h-1)*chh, 0, -chh);
bgr.setColor(Color.white);
bgr.fillRect(0, (h-1)*chh, width, chh);
int i,j;
for(i=0; i<w; i++)
{
for(j=0; j<h-1; j++) ch[i][j] = ch[i][j+1];
ch[i][h-1] = ' ';
}
}
else y++;
}
else if (c == '\t')
{ //Tab
int i;
for(i=8; i>x%8; i--) displaych(' ');
}
else if (c == (char)8)
{ // Backspace
renderchar(ch[x][y], x, y, false); // erase cursor
if (x != 0) x--;
}
else if (c >= 32 && c < 127)
{ // Some printable character
renderchar(c, x, y, true);
ch[x][y] = c;
if (x == w-1) displaych('\n');
else x++;
}
else if (c == 255)
{
// Telnet IAC
char cmd = readch();
char opt = readch();
switch(opt)
{
case 1: // echo
if (cmd == 251) echo = false;
else if (cmd == 252) echo = true;
break;
case 3: // supress go-ahead
break;
case 24: // terminal type
if (cmd == 253)
{
// IAC WILL terminal-type
transmitch((char)255);
transmitch((char)251);
transmitch((char)24);
// IAC SB terminal-type IS <term> IAC SE
transmitch((char)255);
transmitch((char)250);
transmitch((char)24);
transmitch((char)0);
transmit(term);
transmitch((char)255);
transmitch((char)240);
}
else if (cmd == 250)
{
while(readch() != 240);
}
break;
default: // some other command
if (cmd == 253)
{
// IAC DONT whatever
transmitch((char)255);
transmitch((char)252);
transmitch((char)opt);
}
break;
}
}
renderchar('_', x, y, false); // draw cursor
}
void transmit(String str)
{
int i;
for(i=0; i<str.length(); i++) transmitch(str.charAt(i));
}
void transmitch(char c)
{
if (c == '\n') transmitch('\r');
try
{
out.write((int)c);
out.flush();
}
catch(IOException e){ };
if (debug)
System.out.println("Sent char " + String.valueOf((int)c) + " = " + String.valueOf(c));
}
}
分享到:
相关推荐
2. **Socket编程**:Java的Socket类提供了网络通信的基础,服务端与客户端的通信通常基于TCP/IP协议栈,通过Socket建立连接,实现数据的双向传输。 3. **ServerSocket类**:服务端会使用Java的ServerSocket类来监听...
《telnet协议与Java客户端源代码解析》 在IT领域,网络通信协议是构建网络应用的基础,其中telnet协议作为一款历史悠久的远程登录协议,它为用户...深入学习和理解这些知识,将有助于我们更好地设计和实现网络应用。
本篇文章将详细探讨TCP服务端和TCP客户端的概念、工作原理以及常用的工具软件。 TCP服务端是网络应用程序,它等待来自网络的连接请求,并在接收到请求后提供服务。服务端通常运行在一个特定的IP地址和端口号上,这...
本案例将深入探讨如何使用Mina作为服务端,结合Socket客户端实现文件的传输。 一、Apache Mina框架介绍 Apache Mina,全称为“Minimalist Application Networking Abstraction”,是一个提供了统一的API来处理多种...
客户端是应用与Memcached交互的接口,常见的客户端库有libmemcached(C语言)、pylibmc(Python)和memcached-client(Java)等。客户端的主要任务包括: - **连接管理**:建立与服务端的TCP连接或Unix域套接字连接...
Java Socket服务端和客户端编程是Java网络编程中的核心部分,主要涉及如何在互联网上实现两台计算机之间的通信。网络通信的两大问题是定位主机和数据传输的可靠性与效率。TCP/IP协议族为此提供了解决方案,其中IP层...
在Java中,`Socket`和`ServerSocket`提供了丰富的API,便于开发者构建复杂的服务端和客户端应用。需要注意的是,为了保证网络编程的健壮性,应正确处理异常,确保在完成通信后关闭所有打开的流和连接。 总的来说,...
### Java Socket服务端和客户端编程知识点详解 #### 一、网络编程基础概念 在Java网络编程中,**Socket**是实现客户端与服务器间通信的重要工具。网络编程主要涉及两个核心问题: 1. **准确定位网络上的主机**:...
Java Socket服务端和客户端编程是Java软件开发中的一个重要部分,主要涉及网络通信和TCP/IP协议。网络编程的主要目标是定位网络主机并实现可靠的数据传输。TCP/IP协议族在这两方面都扮演了关键角色,其中IP层负责...
标题"memcached服务端已经多个客户端"指出我们关注的是memcached缓存系统,它包括服务端和多个客户端。这通常意味着我们可以期待一个完整的环境,用于学习、测试或部署memcached,包括服务器组件以及可以与其交互的...
Java Socket编程是Java中用于实现网络通信的核心技术,主要用于解决如何在互联网上定位主机和高效传输数据的问题。在TCP/IP协议栈中,IP层通过IP地址确定主机位置,而TCP层提供面向应用的可靠(TCP)或不可靠(UDP)...
以上就是使用Java Mina框架创建一个简单的Socket服务端和客户端的实现。在实际应用中,可能还需要考虑异常处理、心跳机制、多线程处理、消息序列化与反序列化等问题。Mina提供的API非常灵活,可以根据需求进行扩展和...
Java Telnet客户端实例源码 Java zip压缩包查看程序源码.rar java 一个消息发布网站.rar Java 数字签名、数字证书生成源码.rar Java 版的酒店系统,貌似完整.rar Java 电梯模拟程序 v2.0.rar Java 组播组中发送和...
Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码...
研究和实现这样的系统,除了需要了解Java和Linux操作系统知识外,还需要掌握网络编程知识,特别是对SSH协议的理解。此外,研究者还应该具备一定的软件工程知识,以便在设计系统时能够考虑到软件的易用性、可维护性和...
总的来说,Java网络编程涉及到客户端和服务端的交互,这需要对`Socket`和`ServerSocket`的使用有深入理解,以及对网络协议如TCP/IP的了解。同时,通过`URL`和`URLConnection`可以方便地访问和处理远程资源,简化了...
Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密...
Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密...
1)使用netty搭建一个服务端程序和一个客户端程序 2)客户端把上个练习的错误日志上传到服务端程序 3)拓展功能,实现定时上传错误日志及可以使用telnet连接服务器手动控制上传错误日志 4)使用多线程拓展netty服务端...
在"CollectionService"的实现中,每个连接的输入流会被用来读取telnet客户端发送的数据,然后这些数据会被处理并显示在控制台上。这一步骤可能涉及到数据的解析和格式化,以便于理解和分析。同时,如果需要对收集到...