博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java基础入门-建立能够多client链接的ServerSocket
阅读量:5310 次
发布时间:2019-06-14

本文共 1917 字,大约阅读时间需要 6 分钟。

承接上一篇文章,今天谈论一下能够多client链接的ServerSocket。

这里面注意涉及到的技术点是:

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类主要实现的功能跟上一篇几乎相同。都是接受client发过来的数据,然后复制一下打印出来,可是这里面继承了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循环里面,每一个client链接过来,他都会开启一个独立线程来服务

扩展一下,这里的測试类仅仅是用来測试用的,假设考虑到性能的问题,这里通常会採取线程池,并且还须要有检測链接是否还在的检測类,不然随着client链接的添加,内存直接爆掉。

并且这两个类还欠缺了一些东西,譬如client如何退出?检測链接?半关闭?等等,这些后面待续

转载于:https://www.cnblogs.com/lxjshuju/p/7157849.html

你可能感兴趣的文章
简单了解HashCode()
查看>>
闭包理解
查看>>
asp.net C#后台实现下载文件的几种方法(全)
查看>>
Web前端开发工程师的具备条件
查看>>
实用Android开发工具和资源精选
查看>>
TileMap
查看>>
JS属性大全
查看>>
java复制文件
查看>>
第一册:lesson seventy nine.
查看>>
GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
查看>>
团队作业
查看>>
数据持久化时的小bug
查看>>
mysql中key 、primary key 、unique key 与index区别
查看>>
bzoj2257
查看>>
Linux查看文件编码格式及文件编码转换<转>
查看>>
Leetcode: Find Leaves of Binary Tree
查看>>
Vue 模板解释
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>