`
geelong
  • 浏览: 115670 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ServerSocket 多线程服务器开发

阅读更多

 

package socket;

import java.net.* ;
import java.io.* ;
public class HelloServer{
	public static void main(String args[]) throws Exception {	// 所有异常抛出
		ServerSocket server = null ;		// 定义ServerSocket类
		Socket client = null ;	// 表示客 户端
		PrintStream out = null ;		// 打印流输出最方便
		server = new ServerSocket(8888) ;	// 服务器在8888端口上监听
		System.out.println("服务器运行,等待客户端连接。") ;
		client = server.accept() ;		// 得到连接,程序进入到阻塞状态
		String str = "hello world" ;	// 表示要输出的信息
		out = new PrintStream(client.getOutputStream()) ;
		out.println(str) ;	// 向客户端输出信息
		client.close() ;
		server.close() ;
	}
};

 

客户端连接

在运行下输入 telnet  输入 open localhost 8888

 

 

 

 

客户端

 

 

package socket;

import java.net.* ;
import java.io.* ;
public class HelloClient{
	public static void main(String args[]) throws Exception {	// 所有异常抛出
		Socket client = null ;	// 表示客 户端
		client = new Socket("localhost",8888) ;
		BufferedReader buf = null ;	// 一次性接收完成
		buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
		String str = buf.readLine() ;
		System.out.println("服务器端输出内容:" + str) ;
		buf.close() ;
		client.close() ;
	}
};

服务器完成一次连接,便退出

 

 

 

可以一直输入的服务器,

 

 

 

package socket;

import java.net.* ;
import java.io.* ;
public class EchoServer{
	public static void main(String args[]) throws Exception {	// 所有异常抛出
		ServerSocket server = null ;		// 定义ServerSocket类
		Socket client = null ;	// 表示客 户端
		BufferedReader buf = null ;	// 接收输入流
		PrintStream out = null ;		// 打印流输出最方便
		server = new ServerSocket(8888) ;	// 服务器在8888端口上监听
		boolean f = true ;	// 定义个标记位
		while(f){
			System.out.println("服务器运行,等待客户端连接。") ;
			client = server.accept() ;		// 得到连接,程序进入到阻塞状态
			out = new PrintStream(client.getOutputStream()) ;
			// 准备接收客户端的输入信息
			buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
			boolean flag = true ;	// 标志位,表示可以一直接收并回应信息
			while(flag){
				String str = buf.readLine() ;		// 接收客户端发送的内容
				if(str==null||"".equals(str)){	// 表示没有内容
					flag = false ;	// 退出循环
				}else{
					if("bye".equals(str)){	// 如果输入的内容为bye表示结束
						flag = false ;
					}else{
						out.println("ECHO : " + str) ;	// 回应信息
					}
				}
			}
			client.close() ;
		}
		server.close() ;
	}
};
 

 

 

客户端

 

 

import java.net.* ;
import java.io.* ;
public class EchoClient{
	public static void main(String args[]) throws Exception {	// 所有异常抛出
		Socket client = null ;	// 表示客 户端
		client = new Socket("localhost",8888) ;
		BufferedReader buf = null ;	// 一次性接收完成
		PrintStream out = null ;	// 发送数据
		BufferedReader input = null ;	// 接收键盘数据
		input = new BufferedReader(new InputStreamReader(System.in)) ;
		buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
		out = new PrintStream(client.getOutputStream()) ;
		boolean flag = true ;		// 定义标志位
		while(flag){
			System.out.print("输入信息:") ;
			String str = input.readLine() ;	// 接收键盘的输入信息
			out.println(str) ;
			if("bye".equals(str)){
				flag = false ;
			}else{
				String echo = buf.readLine() ;	// 接收返回结果
				System.out.println(echo) ;	// 输出回应信息
			}
		}
		buf.close() ;
		client.close() ;
	}
};
 

多线程服务器

 

 

package socket;

import java.net.* ;
import java.io.* ;
public class EchoThreadServer{
	public static void main(String args[]) throws Exception {	// 所有异常抛出
		ServerSocket server = null ;		// 定义ServerSocket类
		Socket client = null ;	// 表示客 户端
		server = new ServerSocket(8888) ;	// 服务器在8888端口上监听
		boolean f = true ;	// 定义个标记位
		while(f){
			System.out.println("服务器运行,等待客户端连接。") ;
			client = server.accept() ;		// 得到连接,程序进入到阻塞状态
			new Thread(new EchoThread(client)).start() ;	// 每一个客户端表示一个线程
		}
		server.close() ;
	}
};

package socket;

import java.net.* ;
import java.io.* ;
public class EchoThread implements Runnable{
	private Socket client = null ;
	public EchoThread(Socket client){
		this.client = client ;
	}
	public void run(){
		BufferedReader buf = null ;	// 接收输入流
		PrintStream out = null ;		// 打印流输出最方便
		try{
			out = new PrintStream(client.getOutputStream()) ;
			// 准备接收客户端的输入信息
			buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
			boolean flag = true ;	// 标志位,表示可以一直接收并回应信息
			while(flag){
				String str = buf.readLine() ;		// 接收客户端发送的内容
				if(str==null||"".equals(str)){	// 表示没有内容
					flag = false ;	// 退出循环
				}else{
					if("bye".equals(str)){	// 如果输入的内容为bye表示结束
						flag = false ;
					}else{
						out.println("ECHO : " + str) ;	// 回应信息
					}
				}
			}
			client.close() ;
		}catch(Exception e){}
		
	}
};


 

 

 

分享到:
评论

相关推荐

    web-client-server:简单 HTTP Web 客户端和多线程 Web 服务器的 Java 实现

    网络客户端服务器 ... ###开发工具: 编程语言: Java (jdk 1.7... WebServer.java :实现多线程服务器并初始化 serverSocket 以侦听客户端请求。 一旦连接了客户端,处理就会移交给单独的 RequestHandler 线程。 Reque

    基于naga开发的TCP客户端/服务器程序

    // 还需要一个循环事件,执行事件监听,此处可能需要使用到多线程编程 // 设置接收链接方式 serverSocket.setConnectionAcceptor(ConnectionAcceptor.ALLOW); while (true) { // 循环不断监听...

    JAVA实现远程文件读取

    多线程可以提高服务器端的性能和响应速度。 5. Java 网络编程 Java提供了许多支持网络编程的类和接口,包括Socket、ServerSocket、BufferedReader、PrintWriter等。这些类和接口可以帮助开发者快速实现网络编程的...

    基于JAVA的聊天系统的设计与实现

    服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为9527,然后无限循环调用accept()方法接受客户程序的连接。 服务器线程源码: package qq.server; import...

    Java网络编程实践课程设计报告.pdf

    这是一份 Java 网络编程实践课程设计报告,旨在帮助学生掌握 Java 编程语言、图形化界面、多线程、网络和数据库等技术,并提高动手实践能力和书本知识学习。该课程设计报告涵盖了 Java network 编程的相关知识点,...

    java多线程tcpsocketserver源码-my-stars:我的GitHub星标存储库

    java多线程tcp socket server源码真棒明星 我的 GitHub 星星的精选列表! 生成者 内容 苹果脚本 - 用于 iTerm2 Alfred 集成的 AppleScript。 集会 - 使用 Rust 的安全、快速、小型加密 - 用 amd64 程序集编写的 ...

    JAVA网络通信系统的研究与开发.rar

    对于需要实现更高级功能的系统,可以利用Java的框架和库,如Netty、Spring Boot等,简化开发过程并提供更多功能支持。 在系统设计中,需要考虑网络通信的并发处理、线程管理、异常处理等问题,确保系统的稳定性和...

    C# socket 源码 多人聊天

     要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。  根据连接启动的方式以及本地套接字要连接的目标,套接字...

    Java开发技术大全 电子版

    第8章Java的多线程机制266 8.1线程的概念266 8.1.1多线程的特点266 8.1.2线程的状态267 8.2Thread类268 8.2.1Thread类的构造方法268 8.2.2Thread类的常用方法268 8.3多线程程序的编写269 8.3.1利用Thread的...

    JAVA课程设计(1).doc

    " "Java的异常处理机制 " "Java的数据库连接技术 " "Java的多线程技术与动画制作 " "Java的网络编程 " " " "设计选题:基于C/S的图书查询系统的实现 " "包括客户端程序和服务器端程序。客户端程序向服务器端提出请求...

    java编程基础,应用与实例

    14.3 多线程 208 14.4 线程的优先级 210 14.5 线程的休眠与唤醒 211 14.6 线程让步 213 14.7 线程同步 214 14.7.1 同步块 216 14.7.2 同步化方法 219 14.7.3 生产者与消费者 221 14.7.4 多消费者 ...

    疯狂Android讲义源码

     13.1.4 加入多线程 483  13.2 使用URL访问网络资源 488  13.2.1 使用URL读取网络资源 489  13.2.2 使用URLConnection  提交请求 490  13.3 使用HTTP访问网络 496  13.3.1 使用HttpURLConnection 496  ...

Global site tag (gtag.js) - Google Analytics