java服务器应答例子(用telnet方法测试)
2016-04-07 12:54
507 查看
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class HelloServer { public static final int SERVER_PORT = 9527; private ServerSocket serverSocket = null; private ExecutorService executorService = null; private final int POOL_SIZE = 2; public HelloServer() throws Exception{ int cpuCount = Runtime.getRuntime().availableProcessors(); executorService = Executors.newFixedThreadPool(cpuCount * POOL_SIZE); serverSocket = new ServerSocket(SERVER_PORT); System.out.println("服务器已启动,监听中..."); while(true){ try{ Socket socket = serverSocket.accept(); executorService.execute(new HelloResponser(socket)); }catch(Exception e){ e.printStackTrace(); } } } // class HelloResponser implements Runnable{ private Socket socket = null; public HelloResponser(Socket socket){ this.socket = socket; } @Override public void run() { try{ // String clientIp = socket.getInetAddress().getHostAddress(); System.out.println("开始处理来在 " + clientIp + ":" + socket.getPort() + " 的请求"); InputStream socketInStream = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(socketInStream, "UTF-8")); // OutputStream socketOutStream = socket.getOutputStream(); String clientRequestString = null; while((clientRequestString = br.readLine()) != null){ System.out.println("接收到客户端 " + clientIp + " 的信息:" + clientRequestString); String serverReturn = null; if(clientRequestString.equals("sb")){ serverReturn = "你也是SB.\r\n"; System.out.println("发送给客户端" + clientIp + "应答信息:" + serverReturn); socketOutStream.write(serverReturn.getBytes("UTF-8")); System.out.println("结束来自 " + clientIp + ":" + socket.getPort() + " 的请求"); break; }else{ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E"); serverReturn = df.format(new Date()) + "\r\n"; System.out.println("发送给客户端 " + clientIp + "应答信息:" + serverReturn); socketOutStream.write(serverReturn.getBytes("UTF-8")); } } }catch(Exception e){ e.printStackTrace(); }finally{ try { if(socket != null){ socket.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } // public static void main(String[] args) throws Exception { new HelloServer(); } }
<1>开启默认的telnet功能
http://jingyan.baidu.com/article/7908e85c6ec355af491ad265.html
<2>cmd模式下和服务器进行对话
telnet 127.0.0.1 9527
<3>cmd方式解除端口占用(以9010端口为例)
1.得到占据9010端口进程的PID
netstat -nao | findstr "9010"
TCP 127.0.0.1:9010 0.0.0.0:0 LISTENING 3017
表示PID为3017的进程占用了9010端口
也可以查看3017进程占据的端口的详细情况
tasklist | findstr "3017"
2.关掉占领端口的进程
taskkill /pid 3017
总结:
socket负责客户端和服务器的连接,连接上后,客户端和服务器通过socket的输入输出流进行通信。客户端通过输入流获取服务器消息。通过输出流向服务器发送消息。
相关文章推荐
- Java运算符
- Java语句的执行结构
- 自定义注释——Java
- Java常量,变量和数据类型
- Shiro学习(12)与Spring集成
- nested exception is java.io.FileNotFoundException: class path resource [spring/spring-datasource-mog
- eclipse下载安装
- Java回调机制解析
- Eclipse maven
- 快速排序(附Java实现和分析)
- 【算法】超大数组去重(Java语言实现)
- 应该被记住的 8 位 Java 人物
- Eclipse
- (MyEclipse配置Hibernate报错)SQL Error: 1146, SQLState: 42S02
- eclipse调试一个struts2例子时遇到的一些问题总结
- java.net.URISyntaxException的解决办法
- Spring中配置和读取多个Properties文件
- Java中 static/transient,final/volatile 说明
- 堆排序--Java实现
- Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析