java基础入门-建立可以多客户端链接的ServerSocket

承接上一篇文章,今天谈论一下可以多客户端链接的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类主要实现的功能跟上一篇差不多,都是接受客户端发过来的数据,然后复制一下打印出来,但是这里面继承了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循环里面,每个客户端链接过来,他都会开启一个独立线程来服务

扩展一下,这里的测试类只是用来测试用的,如果考虑到性能的问题,这里一般会采取线程池,而且还需要有检测链接是否还在的检测类,不然随着客户端链接的增加,内存直接爆掉。

而且这两个类还欠缺了一些东西,譬如客户端怎样退出?检测链接?半关闭?等等,这些后面待续

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 10:44:05

java基础入门-建立可以多客户端链接的ServerSocket的相关文章

java基础入门-建立能够多client链接的ServerSocket

承接上一篇文章,今天谈论一下能够多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.S

WebSocket.之.基础入门-建立连接

WebSocket.之.基础入门-建立连接 1. 使用开发工具(STS.Eclipse等)创建web项目.如下图所示,啥东西都没有.一个新的web项目. 2. 创建java类.index.jsp页面.注意:web.xml未做任何改动. TestConfig.java 代码如下: 1 package com.charles.socket; 2 3 import java.util.Set; 4 5 import javax.websocket.Endpoint; 6 import javax.we

Java基础入门 传智播客pdf

下载地址:网盘下载 内容简介 <Java基础入门>从初学者的角度详细讲解了Java开发中重点用到的多种技术.全书共11章,包括Java开发环境的搭建及其运行机制.基本语法.面向对象的思想,采用典型翔实的例子.通俗易懂的语言阐述面向对象中的抽象概念.在多线程.常用API.集合.IO.GUI.网络编程章节中,通过剖析案例.分析代码结构含义.解决常见问题等方式,帮助初学者培养良好的编程习惯.最后,讲解了Eclipse开发工具,帮助初学者熟悉开发工具的使用.  <Java基础入门>附有配套

Java基础入门 目录:

本系列博文内容主要是自己日常工作学习中常见.注意.以及还需要巩固的内容,有些本人熟练掌握的内容不在该博文内,也不能当作查询技术的"海词"使用,主要用于学习并记录成长!!! Java开发入门 Java编程基础 Java API

Java 基础入门

Java基础 JVM.JDK.JRE三者的关系: JDK:(Java Develop Kit)主要是针对开发人员使用的,是整个java的核心.它包括了Java运行环境(JRE),Java工具( javac/java/jdb等 )和Java基础类库. JRE:(Java Runtime Environment)是运行java程序必须的环境的集合.它包括了JVM标准实现和Java核心类库. JVM:(Java Virtual Machine)java虚拟机,java本身不跨平台,java跨平台是依靠

JAVA基础入门通关检测

一.JAVA基础知识点问答(1.2.3章) 1. JDK1.6.0_06软件的安装.(请安装在 C:\Java 目录下) 2. JAVA的开发环境如何配置?(即:JAVA_HOME . Path . CLASSPATH 的配置) 3. 开发一个JAVA应用程序的步骤是?(如下程序) public class FirstSample { public static void main(String[] args ) { System.out.print ("欢迎你们来北京,来到"); S

JAVA基础入门

Java入门基础 1.IDE->Eclipse 新建程序步骤 1.创建一个Java项目 2.创建一个包(package) 也就相当于C#中的命名空间C++中的头文件 3.创建一个类 这样就完成了类的创建 2.和c#的不同之处 1.方法默认都是虚方法 2.默认的访问修饰符是没有的 3.密封不是seal而是final(表示不可修改的) 4.判断是否实现不是is而是instanceof 5.接口中可以有属性 6.抽象类可以用来当作匿名类实现并调用它的方法, 7.可变长度所用指令...

19-ESP8266 SDK开发基础入门篇--C# TCP客户端编写 , 连接和断开

https://www.cnblogs.com/yangfengwu/p/11130428.html 渐渐的看过去,,,好多节了... 这节做一个C# TCP客户端 新建项目啥子的就不详细截图写了,自行看前面了解 (我的文章只要是有序号的,必须要看前面,因为我所写的教程即是基础又是综合) 先做个这个页面,先做连接和断开 链接TCP用这个变量 其实连接TCP 几句就完了 我定义了一个函数是因为,其实连接时阻塞的,,所以咱需要开个任务 C# 的任务是这样用 OK  现在测试 由于我是用的台式机,,没

JAVA基础篇—模拟服务器与客户端通信

第一种: 客户端class Client package 服务器发送到客户端; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class Client { public static void main(String[] args) { try { Socket socket=new Socket