java这个简单的服务器我要如何读取客户端的输入信息?

问题描述

java这个简单的服务器我要如何读取客户端的输入信息?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;

public class EchoServer {
public static int DEFAULT_PORT = 7;
public static String text="""";
public static ServerSocketChannel server;
public static SocketChannel client ;
public static ByteBuffer output ;
public static void main(String[] args){
int port;
try{
port = Integer.parseInt(args[0]);
}catch(RuntimeException ex){
port = DEFAULT_PORT;
}
System.out.println(""Listening for connertions on port ""+port);

    ServerSocketChannel serverChannel;    Selector selector;    try{        serverChannel = ServerSocketChannel.open();        ServerSocket ss = serverChannel.socket();        InetSocketAddress address = new InetSocketAddress(port);        ss.bind(address);        serverChannel.configureBlocking(false);        selector =Selector.open();        serverChannel.register(selector SelectionKey.OP_ACCEPT);    }catch(IOException ex){        ex.printStackTrace();        return;    }    while(true){        try{            selector.select();        }catch(IOException ex){            ex.printStackTrace();            break;        }        Set<SelectionKey> readyKeys = selector.selectedKeys();        Iterator<SelectionKey> iterator = readyKeys.iterator();        while(iterator.hasNext()){            SelectionKey key = iterator.next();            iterator.remove();            try{                if(key.isAcceptable()){                    ServerSocketChannel server = (ServerSocketChannel) key.channel();                    SocketChannel client = server.accept();                    System.out.println(""Accepted connection from ""+client);                    client.configureBlocking(false);                    SelectionKey clientKey = client.register(selector SelectionKey.OP_WRITE|SelectionKey.OP_READ);                    ByteBuffer buffer = ByteBuffer.allocate(100);                    clientKey.attach(buffer);                }                if(key.isReadable()){                    client =(SocketChannel)key.channel();                    output = (ByteBuffer)key.attachment();                    client.read(output);                    output.flip();                    Charset charset = Charset.forName(""UTF-8"");                    CharsetDecoder decoder = charset.newDecoder();                    CharBuffer charBuffer = null;                    charBuffer = decoder.decode(output);                    text=charBuffer.toString();                    //if(text.equals(""time""))                    //{                        //System.out.println(""2"");                        Date date=new Date();                        DateFormat format=new SimpleDateFormat(""yyyy-MM-dd HH:mm:ss"");                        String time=format.format(date);                        byte b[] = time.getBytes();                        //将十六进制字符串转换成十进制整数                        //int i=Integer.decode(time);                        //创建一个大小为1的字节缓冲区因为只放一个byte值                        ByteBuffer bb=ByteBuffer.allocate(1);                        //将十进制整数转换成二进制byte值然后存进ByteBuffer                        //bb.put(b);                        //打印ByteBuffer中的byte值                        //byte []b1=bb.array();                        client.write(output);                    //  output.compact();                    //}                //  text=output.toString();                    //System.out.println(text);                    //output.compact();                }                if(key.isWritable()){                     client = (SocketChannel) key.channel();                     output = (ByteBuffer)key.attachment();                    //output.flip();                    client.write(output);                    //output.compact();                }            }catch(IOException ex){                key.cancel();                try{                    key.channel().close();                }catch(IOException cex){}            }        }    }}

}
这是我写的,中间有点乱,因为客户在cmd访问我的服务器如果他输入time,我要给他返回时间。。。大神求助!!

解决方案

兄弟,这个确实挺乱的,自己再捋一捋吧

时间: 2025-01-26 18:03:12

java这个简单的服务器我要如何读取客户端的输入信息?的相关文章

php简单socket服务器客户端代码实例_php技巧

本篇文章分享一个简单的socket示例,用php.实现一个接收输入字符串,处理并返回这个字符串到客户端的TCP服务. 产生一个 socket 服务端 <?php /*文件名:socket_server.php*/ // 设置一些基本的变量 $host="127.0.0.1";//Socket运行的服务器的IP地址 $port=1234;//Socket运行的服务器的端口,端口取值为1到65535之间的数字,前提是这个端口未被使用 // 设置超时时间,这里设置为永不超时,确保PHP

用Java编写你自己的简单HTTP服务器

HTTP是个大协议,完整功能的HTTP服务器必须响应资源请求,将URL转换为本地系统的资源名.响应各种形式的HTTP请求(GET.POST等).处理不存在的文件请求,返回各种形式的状态码,解析MIME类型等.但许多特定功能的HTTP服务器并不需要所有这些功能.例如,很多网站只是想显示"建设中"的消息.很显然,Apache对于这样的网站是大材小用了.这样的网站完全可以使用只做一件事情的定制服务器.Java网络类库使得编写这样的单任务服务器轻而易举. 定制服务器不只是用于小网站.大流量的网

Java进阶学习:网络服务器编程

编程|服务器|网络 Java的Socket API提供了一个很方便的对象接口进行网络编程.本文用一个简单的TCP Echo Server做例子,演示了如何使用Java完成一个网络服务器. 用作例子的TCP Echo Server是按以下方式工作的: 当一个客户端通过TCP连接到服务器后,客户端可以通过这个连接发送数据到服务端,而服务端接收到数据后会把这些数据用同一个TCP连接发送回客户端.服务端会一直保持这个连接直到客户端关闭它为止. 因为服务器需要能同时处理多个客户端,我们先选用一个常见的多线

Java Socket 简单梳理

Sockets let you send raw streams of bytes back and forth between two computers, giving you fairly low-level access to the TCP/IP protocol. See the File I/O Amanuensis for sample code to do that. In TCP/IP each computer has a name, such as roedy.mindp

java编写简单的E-mail发送端程序_java

本文实例介绍了简单E-mail发送端程序的Java实现代码,分享给大家供大家参考,具体内容如下 在这个代码中,有几个注意点强调一下: 1.使用 Socket 与 SMTP 邮件服务器取得连接,注意 SMTP 服务器的主机名: 2.使用 data 命令时,若写了 subject (主题)之后,邮件的正文部分必须与 subject 之间有一个空行,即"回车+换行",在代码中则是 \r\n : 3.同样需要将发件人的邮箱用户名.密码进行 BASE64 编码之后再传给 SMTP 服务器: 4.

网络编程-有关于Socket的问题,简单的服务器程序与客户程序之间的通信

问题描述 有关于Socket的问题,简单的服务器程序与客户程序之间的通信 问题是这样的,我写了两个简单 的服务器程序,其中一个与一个简单的客户程序可以连续发多次信息,而另一个则不可以,发一次它就会不能继续再发了,程序并没有停止运行,而是服务器收不到它的信息了,求大侠帮忙看下啦~以下为两个服务器程序代码.因为我用的是同一个客户程序测试,所以跟client无关 吧. //这个是可以连续发送信息的服务器 package Test20140210; import java.io.BufferedRead

eclipse如何把一个java文件部署成服务器并导入本地tomcat,本地tomcat已经运行当中

问题描述 eclipse如何把一个java文件部署成服务器并导入本地tomcat,本地tomcat已经运行当中 eclipse如何把一个java文件部署成服务器并导入本地tomcat,本地tomcat已经运行当中 简单的步骤是如何的,有图就更好啦,谢谢大神解答 解决方案 将java工程导出成一个war包然后放在%tomcat_home%/webapps 下面就可以了 解决方案二: 你是想将javaweb项目部署到tomcat服务器吧. 将javaweb项目部署到tomcat教程 解决方案三: 文

自己动手写一个java版简单云相册_java

动手写一个java版简单云相册,实现的功能是: 用户可以一次上传一个至多个文件. 用户可以下载其他人上传的图片. 用户可以查看其他所有人的图片. 用户只能删除通过自己IP上传的图片. 用到的技术: 文件上传下载.设计模式.Dom4j.xPath等. 先看下2个页面: 源代码: web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns=

Java实现简易Web服务器_java

众所周知Web服务器与客户端之间的通信是使用HTTP协议的.HTTP是一个客户端和服务器端请求和应答的标准(TCP).因为HTTP协议是基于TCP协议的,所以我将使用JAVA中的Socket完成这个简易的Web服务器.关于HTTP更详细的资料,各位可以查阅相关资料进行了解. 在服务器编写之前,我们还是先来看一下浏览器与服务器之间通信的规则到底如何. 首先,我们是用ServerSocket来模拟一个服务端,通过浏览器访问,查看浏览器请求的内容: import java.io.BufferedWri