java基础入门-建立可以多客户端链接的ServerSocket
2015-07-27 17:01
656 查看
承接上一篇文章,今天谈论一下可以多客户端链接的ServerSocket。
这里面注意涉及到的技术点是:
1.ServerSocket
2.多线程
这次我们分成两个类来实现,先上代码:
TestSocket依然是测试类,这里跟上一篇文章有区别的地方就在while循环里面,每个客户端链接过来,他都会开启一个独立线程来服务
扩展一下,这里的测试类只是用来测试用的,如果考虑到性能的问题,这里一般会采取线程池,而且还需要有检测链接是否还在的检测类,不然随着客户端链接的增加,内存直接爆掉。
而且这两个类还欠缺了一些东西,譬如客户端怎样退出?检测链接?半关闭?等等,这些后面待续
这里面注意涉及到的技术点是:
1.ServerSocket
2.多线程
这次我们分成两个类来实现,先上代码:
package com.test.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class ThreadedEchoHandler implements Runnable { private Socket socket = null; public ThreadedEchoHandler(Socket s) { this.socket = s; } @Override public void run() { InputStream inputStream; try { inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); Scanner scanner = new Scanner(inputStream); PrintWriter printWriter = new PrintWriter(outputStream, true); printWriter.println("welcome to testServer"); boolean done = false; while (!done && scanner.hasNextLine()) { String line = scanner.nextLine(); printWriter.println("Echo:" + line); if (line.trim().equals("bye")) { done = true; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }ThreadedEchoHandler类主要实现的功能跟上一篇差不多,都是接受客户端发过来的数据,然后复制一下打印出来,但是这里面继承了Runnable,可以支持多线程
package com.test.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class TestSocket { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8189); while (true) { Socket socket = serverSocket.accept(); ThreadedEchoHandler handler = new ThreadedEchoHandler(socket); Thread thread = new Thread(handler); thread.start(); } } }
TestSocket依然是测试类,这里跟上一篇文章有区别的地方就在while循环里面,每个客户端链接过来,他都会开启一个独立线程来服务
扩展一下,这里的测试类只是用来测试用的,如果考虑到性能的问题,这里一般会采取线程池,而且还需要有检测链接是否还在的检测类,不然随着客户端链接的增加,内存直接爆掉。
而且这两个类还欠缺了一些东西,譬如客户端怎样退出?检测链接?半关闭?等等,这些后面待续
相关文章推荐
- java基础入门-建立可以多客户端链接的ServerSocket
- java代码获取ip地址
- 《深入浅出struts2》--第七章,类型转换-支持复杂的对象
- JAVA深复制(深克隆)与浅复制(浅克隆)
- 产生java的动态库文件so的配置步骤
- Java中@Override的作用
- SVN与其他工具整合
- 《Java Concurrency in Practice》之线程封闭(Thread Confinement)
- java性能调优(转载)
- java-web 过滤器 & 监听器 & 拦截器
- Spring -- 注解配置Bean
- Java中的参数传递方式
- Java中Class类详解、用法及泛化
- JavaScipt 排序算法
- Java基础复习(五)
- Java开发--Myeclipse10安装过程以及破解
- java 内存分配
- [转]终于找到全annotation配置springMVC的方法了(事务不失效)
- springboot框架下的上传下载
- Java中ArrayList类的用法(转)