`
j0hnny
  • 浏览: 2749 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

Socket+多线程

阅读更多
服务端:
实现Runnable接口:
public class MultiServerRunnable {
	private ServerSocket server;

	public void service() {
		try {
			server = new ServerSocket(2046);

			while (true) {
				Socket client = server.accept();

				Thread thread = new Thread(new Handler(client));
				thread.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new MultiServerRunnable().service();
	}
}

class Handler implements Runnable {
	private Socket socket;
	private BufferedReader is;
	private PrintWriter os;

	public Handler(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		try {
			is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			os = new PrintWriter(socket.getOutputStream());

			String msg = is.readLine();

//			if (msg.equals("1")) {
//				try {
//					Thread.sleep(10000);
//				} catch (InterruptedException e) {
//					e.printStackTrace();
//				}
//			}

			System.out.println("客户端说:" + msg);
			os.println("服务端收到消息:" + msg);
			os.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (os != null) {
					os.close();
				}
				if (is != null) {
					is.close();
				}
				if (socket != null) {
					socket.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

继承Thread类:
public class MultiServerThread {
	private ServerSocket server;

	public void service() {
		try {
			server = new ServerSocket(2046);

			while (true) {
				Socket client = server.accept();

				Handler handler = new Handler(client);
				handler.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new MultiServerThread().service();
	}
}

class Handler extends Thread {
	private Socket socket;
	private BufferedReader is;
	private PrintWriter os;

	public Handler(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		try {
			is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			os = new PrintWriter(socket.getOutputStream());

			String msg = is.readLine();

//			if (msg.equals("1")) {
//				try {
//					Thread.sleep(5000);
//				} catch (InterruptedException e) {
//					e.printStackTrace();
//				}
//			}

			System.out.println("客户端说:" + msg);
			os.println("服务端收到消息:" + msg);
			os.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (os != null) {
					os.close();
				}
				if (is != null) {
					is.close();
				}
				if (socket != null) {
					socket.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

客户端:
public class MultiClient {

	private static Runnable service(final int i) {
		return new Runnable() {
			private Socket socket = null;
			BufferedReader in = null;
			PrintWriter out = null;

			@Override
			public void run() {
				try {
					socket = new Socket("localhost", 2046);

					in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
					out = new PrintWriter(socket.getOutputStream());

					out.println(i);
					out.flush();
					System.out.println(in.readLine());

				} catch (UnknownHostException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

		};
	}

	public static void main(String[] args) {
		Thread t1 = new Thread(service(1));
		Thread t2 = new Thread(service(2));
		t1.start();
		t2.start();
	}
}
分享到:
评论

相关推荐

    SOCKET+多线程例子

    在IT领域,网络编程是不可或缺的一部分,而Socket和多线程技术则是构建网络应用程序的核心工具。本示例项目"SOCKET+多线程例子"旨在帮助初学者掌握这两个关键概念,以便于创建高效的网络通信应用。 首先,让我们...

    Swing + Socket + 多线程 至尊QQ 客户端安装包

    【Swing + Socket + 多线程 至尊QQ 客户端安装包】是一个集成Swing图形界面、Socket通信和多线程技术的QQ类聊天应用。Swing是Java提供的一个用于创建桌面应用程序的GUI(图形用户界面)库,它提供了丰富的组件和样式...

    socket+多线程实现局域网聊天

    服务端开启多线程监听客户端,如果服务端收到客户端发过来的请求,服务端就会把某个机器输过来的信息进行转播出去,发给所有客户端,并带上Ip,所有客户端的控制台就可以看到某人说了什么话,类似一个局域网群聊,...

    Socket+多线程+异步委托实现文件传输

    "Socket+多线程+异步委托实现文件传输"这个主题聚焦于如何高效地在多个客户端和服务器之间进行文件交换。让我们深入探讨一下这个话题涉及的关键技术。 1. **Socket**:Socket是网络编程的基本组件,它提供了应用...

    c#socket+多线程实例

    综上所述,"C# Socket+多线程实例"涉及的关键知识点包括C# Socket的使用、TCP和UDP协议的理解、多线程编程、异步操作、线程安全以及设计模式在实际项目中的应用。通过这些知识,开发者可以构建出高效、稳定且可扩展...

    java多线程+Socket+Swing做的局域网聊天程序

    【标题】"java多线程+Socket+Swing做的局域网聊天程序"涉及的核心知识点主要涵盖Java编程、多线程、网络通信以及图形用户界面设计。以下将详细阐述这些关键概念及其在实现局域网聊天程序中的应用。 **1. Java编程**...

    socket+多线程的HTTP编程代码

    `socket`是网络通信的基础,而`多线程`则是提升系统并发处理能力的重要手段。`HTTP`协议作为互联网上应用最为广泛的一种网络协议,它规定了客户端与服务器之间数据交换的格式和规则。下面我们将深入探讨`socket`、`...

    智能通道系统 Socket+多线程+数据库+工业上CRC查表校验信息码

    本系统全面地展示了Socket与多线程,数据库,工业上采用的CRC查表校验信息码 等综合技术的完整代码,从代码的角度展示了工控通讯的完整过程,本系统可以改装成 地铁、火车站、海关、商场、旅游景点,智能小区、大型...

    java socket 多线程 简易实现

    Java Socket多线程简易实现是网络编程中的一个基础概念,主要应用于客户端与服务器之间的通信。在Java中,Socket是基于TCP协议的,提供了一种可靠的、面向连接的字节流通信方式。多线程则是Java并发编程的重要特性,...

    java多线程Socket简单实现

    Java多线程Socket实现是网络编程中的重要概念,它结合了Java的并发处理能力和Socket通信技术,用于构建高效、可扩展的网络应用。Socket在计算机网络中起到桥梁的作用,允许两个远程应用程序通过TCP/IP进行数据交换。...

    基于java+socket+swing+多线程聊天室

    综上所述,这个基于Java的聊天室项目利用了Swing来构建用户界面,通过Socket进行网络通信,采用多线程保证程序的并发性和响应性,并通过特定的消息格式实现了私聊功能。开发者可能在"SimpleChatRoom2"中实现了更多的...

    Java开发五子棋程序完整练手项目流程实战_优秀案例实例源代码源码.zip

    ( Java awt+ Socket编程+多线程+人机对战实现)。 五子棋是起源于中国古代的传统黑白棋种,是一款老少皆宜的益智类游戏。它既有现代游戏蕴含的短、平、快”的特点,又有中国古典哲学蕴含的“阴阳易理”。常玩此款游戏既...

    c#超级Socket库SuperSocket,SOCKET多线程编程

    在.NET平台上,SuperSocket以其易于扩展和高度定制化的特性,成为了Socket多线程编程的一个优选方案。 **一、SuperSocket的核心特性** 1. **多线程支持**:SuperSocket采用了多线程模型来处理客户端的连接,确保了...

    基于SOCKET和多线程的应用程序间通信技术的研究.pdf

    《基于SOCKET和多线程的应用程序间通信技术的研究》一文深入探讨了在不同程序之间采用SOCKET和多线程技术进行数据通信的方法。本文将详细解析标题和描述中的核心知识点,包括SOCKET和多线程的基本原理,以及它们在...

    Windows下C++多线程SOCKET服务代码

    <br>大家都知道网关程序即SOCKET通讯多线程程序,其中当然用到SOCKET;网关中有SOCKET服务端, 也有SOCKET客户端;作为SOCKET服务端时,需要接收远程主机的连接,当远程主机请求连接, 根据业务需要首先要...

    socket短连接和长连接 多线程的应用

    多线程(Multithreading)是并发执行多个任务的技术,特别是在Socket编程中,多线程能有效提高服务端的并发处理能力。例如,一个线程负责接收新的客户端连接,接收到连接后,创建新的线程来处理该连接的数据传输,...

    SOCKET 服务端 多线程处理客户端例子

    本示例主要关注的是如何在C语言中编写一个Socket服务端程序,利用多线程技术来处理来自多个客户端的并发请求。 首先,让我们了解Socket的基本概念。Socket可以看作是网络中的通信端点,通过创建Socket,服务端和...

    C Socket通信多线程数据双向收发实例VS2010(全部源码)

    1、运用多线程和Socket技术实现Socket Server端侦听多个客户端请求; 2、实现服务器端循环处理客户端不同请求从而实现不同测试要求,并向客户端循环发送数据; 3、实现客户端向服务器端发送不同测试命令,并接收...

    Qt Socket 多线程代码实现

    本项目标题为“Qt Socket 多线程代码实现”,是一个适合初学者的示例,它展示了如何使用QtcpSocket在多线程环境中构建一个服务器。下面将详细介绍相关知识点。 首先,我们来理解什么是Socket。Socket是一种在不同...

    netty技术文档,socket技术 多线程

    标题"Netty技术文档,Socket技术,多线程"指出我们要讨论的是Netty框架,它与Socket编程以及多线程技术的结合。Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端...

Global site tag (gtag.js) - Google Analytics