`
lvwenwen
  • 浏览: 961680 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

多线程Socket例子

阅读更多

文章链接:http://javasam.iteye.com/blog/1484307

文章链接:http://caihx.iteye.com/blog/605186

文章链接:http://caihx.iteye.com/blog/605191

 

package com.googlecode.garbagecan.test.socket.MutlipThread;

import java.io.*;
import java.net.*;

public class ConnectionHandler implements Runnable {
	protected Socket socketToHandle;

	public ConnectionHandler(Socket aSocketToHandle) {
		socketToHandle = aSocketToHandle;
	}

	public void run() {
		try {
			PrintWriter streamWriter = new PrintWriter(socketToHandle
					.getOutputStream());
			BufferedReader streamReader = new BufferedReader(
					new InputStreamReader(socketToHandle.getInputStream()));

			String fileToRead = streamReader.readLine();
			BufferedReader fileReader = new BufferedReader(new FileReader(
					fileToRead));

			String line = null;
			while ((line = fileReader.readLine()) != null)
				streamWriter.println(line);

			fileReader.close();
			streamWriter.close();
			streamReader.close();
		} catch (Exception e) {
			System.out.println("Error handling a client: " + e);
		}
	}
}


package com.googlecode.garbagecan.test.socket.MutlipThread;

import java.io.*;
import java.net.*;

public class MultithreadedRemoteFileServer {
	protected int listenPort;

	public MultithreadedRemoteFileServer(int aListenPort) {
		listenPort = aListenPort;
	}

	public void acceptConnections() {
		try {
			ServerSocket server = new ServerSocket(listenPort, 5);
			Socket incomingConnection = null;
			while (true) {
				incomingConnection = server.accept();
				handleConnection(incomingConnection);
			}
		} catch (BindException e) {
			System.out.println("Unable to bind to port " + listenPort);
		} catch (IOException e) {
			System.out.println("Unable to instantiate a ServerSocket on port: "
					+ listenPort);
		}
	}

	public void handleConnection(Socket connectionToHandle) {
		new Thread(new ConnectionHandler(connectionToHandle)).start();
	}

	public static void main(String[] args) {
		MultithreadedRemoteFileServer server = new MultithreadedRemoteFileServer(
				3000);
		server.acceptConnections();
	}
}


package com.googlecode.garbagecan.test.socket.MutlipThread;

import java.net.Socket;

import sun.jdbc.odbc.ee.ConnectionHandler;

/**
 * 这里我们将讨论 handleConnection() 方法的结构,这个方法生成一个新的 Thread 来处理每个连接。
 * 我们将分两部分讨论这个问题。
 * 这一屏我们将着重该方法本身,然后在下一屏研究该方法所使用的  ConnectionHandler 助手类的结构。
 *  
 *
 */
public class RemoteFileServer {
	public void handleConnection(Socket connectionToHandle) {
	    // new Thread(new ConnectionHandler(connectionToHandle)).start();
	}
}

package com.googlecode.garbagecan.test.socket.sample2;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class MyClient {
	public static void main(String[] args) throws Exception {
		Socket socket = new Socket("localhost", 10000);
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintWriter out = new PrintWriter(socket.getOutputStream());
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

		while (true) {
			String msg = reader.readLine();
			out.println(msg);
			out.flush();
			if (msg.equals("bye")) {
				break;
			}
			System.out.println(in.readLine());
		}
		socket.close();
	}
}


package com.googlecode.garbagecan.test.socket.sample2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,
 * 当第一个Client连接后就占据了这个位置,后续Client不能再继续连接,所以需要做些改动,
 * 当Server没接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,
 * 这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。
 * @author Administrator
 *
 */
public class MyServer {
	public static void main(String[] args) throws IOException {
		ServerSocket server = new ServerSocket(10000);
		
		while (true) {
			Socket socket = server.accept();
			invoke(socket);
		}
	}
	
	private static void invoke(final Socket client) throws IOException {
		new Thread(new Runnable() {
			public void run() {
				BufferedReader in = null;
				PrintWriter out = null;
				try {
					in = new BufferedReader(new InputStreamReader(client.getInputStream()));
					out = new PrintWriter(client.getOutputStream());

					while (true) {
						String msg = in.readLine();
						System.out.println(msg);
						out.println("Server received " + msg);
						out.flush();
						if (msg.equals("bye")) {
							break;
						}
					}
				} catch(IOException ex) {
					ex.printStackTrace();
				} finally {
					try {
						in.close();
					} catch (Exception e) {}
					try {
						out.close();
					} catch (Exception e) {}
					try {
						client.close();
					} catch (Exception e) {}
				}
			}
		}).start();
	}
}
分享到:
评论

相关推荐

    java socket多线程通信案例

    基于多线程实现的JavaSocket客户端-服务端点对点异步通信程序代码

    多线程和socket例子

    在这个"多线程和socket例子"中,我们将深入探讨这两个概念以及它们如何协同工作以实现客户端与服务器端之间的通信。 首先,让我们来了解多线程。在计算机程序中,一个线程是程序执行的一个单一顺序控制流程。在单...

    SOCKET+多线程例子

    本示例项目"SOCKET+多线程例子"旨在帮助初学者掌握这两个关键概念,以便于创建高效的网络通信应用。 首先,让我们深入理解Socket。Socket是网络通信中的一个接口,它允许两个运行在不同机器上的程序通过网络进行...

    Python多线程Socket程序例子

    在Python编程中,多线程和Socket通信是两个重要的概念,它们经常被结合使用以实现高效、并发的网络服务。本篇文章将详细讲解如何在Python中编写一个多线程的Socket程序...这将帮助你掌握Python的多线程Socket编程技术。

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

    在计算机网络编程中,Socket是实现进程间通信(IPC)的一种方式,特别是在互联网环境中,它提供了...对这个程序进行深入学习和分析,可以帮助你理解多线程Socket服务端的工作原理,并为构建自己的并发服务器提供基础。

    Socket通讯与多线程处理-完整实例

    Socket通讯与多线程处理是计算机网络编程中的重要概念,主要应用于分布式系统、服务器开发以及实时数据传输等场景。在本实例中,我们将探讨如何利用Socket进行通信,并结合多线程技术来提升程序的并发处理能力。 ...

    mp.rar_socket 多线程_tcp 多线程_tcp 线程_多线程 Socket_网络 扫描器

    描述中提到的“基于SOCK_STREAM Socket TCP流式扫描器,程序采用多线程编写,是学习多线程Socket网络编程的好例子!”暗示了这个项目的核心是利用Socket接口的SOCK_STREAM类型,即TCP协议,进行流式通信。多线程的...

    linux下多线程读写socket的简单例子

    在Linux操作系统中,多线程编程与网络通信的结合是一个重要的技术领域,特别是在服务器开发中。...对于初学者来说,这是一个很好的起点,通过动手实践,逐步掌握Linux多线程Socket编程的核心技巧。

    多线程Socket.

    多线程Socket阻塞模式下通信的例子 BCB-Socket阻塞模式通讯测试(多线程) 作者:Sncel(地狱情人) QQ:6522203 指导:invalid(空心菜) QQ:309283 http://bcb.vicp.net 测试方法: 在单机上测试: 如果有多个客户...

    同步SOCKET多线程通信例子

    自己刚刚弄SOCKET,网上的很多资源都是FORM的。我自己做了一个命令台的,服务器端长时间侦听端口,当一个客户端连上后,就起一个线程来接受数据,并发送信息。客户端可以接受服务器发回的信息。并且可以多个客户端...

    socket 多线程 的 例子

    总结来说,"socket多线程的例子"是一个演示如何在.NET环境中利用Socket进行并发客户端处理的教学示例。它展示了如何结合多线程技术来构建高效、可扩展的网络服务。这样的例子对于学习网络编程和多线程处理至关重要,...

    java 多线程 socket聊天程序

    总之,Java多线程Socket聊天程序是学习网络编程和并发处理的好例子。它展示了如何使用Java的Socket API建立网络连接,以及如何通过多线程技术处理并发的客户端请求。通过理解和实践这样的项目,开发者可以深入理解...

    java多线程Socket简单实现

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

    socket 多线程 练习的例子

    10. **测试与调试**:编写完多线程Socket程序后,需要进行充分的测试,包括并发连接测试、数据传输正确性测试、异常情况下的稳定性测试等,以确保程序的正确性和可靠性。 总的来说,"socket多线程练习的例子"为我们...

    使用TCPServer编写(多线程)socket服务

    在IT行业中,网络编程是不可或缺的一部分,特别是在服务器端开发中,使用TCPServer编写多线程的socket服务是一项基础但重要的技术。本文将详细讲解如何使用TCPServer来实现这样的服务,以及多线程在其中的作用。 ...

    udp多线程传输例子

    在"udp多线程传输例子"中,我们可以预期看到一个利用多线程进行UDP通信的程序示例。通常,这样的程序会包含以下几个关键部分: 1. **套接字创建**:在C++或Java等编程语言中,首先需要创建一个UDP套接字,这通过...

    Python的Socket连接例子(包含多线程例子)

    本教程将深入探讨Python的Socket连接,特别关注如何实现多线程的Socket服务。我们将基于提供的文件"Server.py"、"Client.py"以及"多线程.py"来讲解相关知识。 首先,让我们了解Socket的基本概念。Socket是操作系统...

    C#Socket多线程编程实例

    C# Socket多线程编程实例是一个讲解如何使用C#语言结合多线程技术来实现网络通信的具体例子。 C#(读作“看井”)是由微软公司推出的一种面向对象的编程语言,它集成于.NET框架中。C#的设计初衷是为了解决当时Sun...

    vc socket tcp 多线程客户端--服务器结构的例子.visual c++

    本文将深入探讨基于Visual C++的TCP多线程客户端-服务器结构,并以"vc socket tcp 多线程客户端--服务器结构的例子"为例进行解析。这个例子包含了一个名为"RawSocketServerExample"的文件,很可能是实现此架构的源...

    win32控制台输出多线程socket编程-client

    在本文中,我们将深入探讨如何在Windows环境下使用Win32 API和套接字(socket)进行多线程编程,特别是创建一个客户端应用。这个示例代码展示了如何建立一个客户端,它能够连接到指定的服务器IP地址(在这个例子中是...

Global site tag (gtag.js) - Google Analytics