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

多线程Socket实用例子

阅读更多
文章路径:http://javasam.iteye.com/blog/1484307
简单实用的Socket例子--服务端+客户端:
http://javasam.iteye.com/blog/1484173
Java代码 
/**服务端**/ 
 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.Socket; 
 
public class ThreadServer extends Thread { 
 
    private Socket server; 
    private BufferedReader reader; 
    private PrintWriter writer; 
 
    public ThreadServer(Socket socket) throws IOException { 
        server = socket; 
        reader = new BufferedReader(new InputStreamReader( 
                server.getInputStream()));//创建输入流 
        writer = new PrintWriter(new OutputStreamWriter( 
                server.getOutputStream()));//创建输出流 
        start(); 
    } 
 
    public void run() { 
        try { 
            while (true) { 
                String str = reader.readLine();//读取客户端传来的请求 
                if (str.equals("END")) 
                    break; 
                System.out.println("Echoing:" + str); 
                writer.println(str);//打印请求信息 
            } 
        } catch (IOException e) { 
        } finally { 
            try { 
                server.close(); 
            } catch (IOException e) { 
            } 
        } 
    } 
 
        /**main启动服务器**/ 
    static final int PORT = 8080; 
    public static void main(String[] args)  throws IOException{ 
        ServerSocket server  = new ServerSocket(PORT);//启动服务器 
        System.out.println("Server Started:" + server); 
        try{ 
            while(true){ 
                Socket socket = server.accept();//进入阻塞状态准备接收数据 
                try { 
                    new ThreadServer(socket);//创建服务线程 
                } catch (IOException e) { 
                    socket.close(); 
                } 
            } 
        }finally{ 
            server.close(); 
        } 
    } 

/**客户端**/ 
package com.net; 
 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
 
 
public class ThreadClient extends Thread { 
 
    private Socket client;//客户端套接字(浏览器等等) 
    private BufferedReader reader;//输入流 
    private PrintWriter writer;//输出流 
    private static int counter = 0;//请求数量 
    private int id = counter++;//请求id 
    private static int threadcount = 0;//线程数量 
 
    public  static int getThreadCount() { 
        return threadcount; 
    } 
    public ThreadClient(InetAddress address){ 
        System.out.println("Making client" + id); 
        threadcount ++; 
        try{ 
            client = new Socket(address,MultiJobServer.PORT);//发送请求到指定地址+端口 
        }catch (IOException e) { 
        } 
         
        try { 
            reader = new BufferedReader(new InputStreamReader(client.getInputStream()));//初始化输入流 
            writer = new PrintWriter(new OutputStreamWriter(client.getOutputStream()),true);//初始化输出流 
            start();//开始线程 
        } catch (IOException e) { 
            try { 
                client.close(); 
            } catch (IOException e2) { 
            } 
        } 
    } 
    public void run(){ 
        try { 
            for(int i = 0 ; i < 25 ; i ++){ 
                writer.println("Client " + id + ":" + i);//发送请求信息 
                String str = reader.readLine();//接收返回的信息 
                System.out.println(str);//打印返回数据 
            } 
            writer.println("END"); 
        } catch (Exception e) { 
        }finally{ 
            try { 
                client.close(); 
            } catch (IOException e) { 
            } 
            threadcount --; 
        } 
    } 
 
    static final int MAX_THREADS = 4000;//最大线程数 
    @SuppressWarnings("static-access") 
    public static void main(String[] args) throws UnknownHostException, InterruptedException { 
        InetAddress address = InetAddress.getByName(null);//得到本机地址 
        while(true){ 
            if(ThreadClient.getThreadCount() < MAX_THREADS){ 
                new ThreadClient(address);//发送请求 
                Thread.currentThread().sleep(100);//休眠100毫秒后继续请求 
            } 
        } 
    } 


/**服务端**/ 
 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
 
public class Server { 
 
    public static final int PORT = 8080; 
    public static void main(String[] args) throws IOException { 
        ServerSocket server = new ServerSocket(PORT); 
        System.out.println("Started " + server); 
        try { 
            Socket client = server.accept(); 
            try { 
                System.out.println("Connection accepted: " + client); 
                BufferedReader  reader = new BufferedReader(new InputStreamReader(client.getInputStream())); 
                PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true); 
                while(true){ 
                    String str = reader.readLine(); 
                    if(str.equals("END"))break; 
                    System.out.println("Echoing:" + str); 
                    writer.println(str); 
                } 
            } finally{ 
                System.out.println("closing..."); 
                client.close(); 
            } 
        } finally{ 
            server.close(); 
        } 
         
    } 

Java代码 
/**客户端**/ 
 
import java.io.BufferedOutputStream; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
 
public class Client { 
    public static void main(String[] args) throws IOException { 
        InetAddress address = InetAddress.getByName(null); 
        System.out.println("address:" + address); 
        Socket client = new Socket(address,JobServer.PORT); 
        try{ 
            System.out.println("socket:" + client); 
            BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream())); 
            PrintWriter writer = new PrintWriter(new BufferedOutputStream(client.getOutputStream()),true); 
            for(int i = 0; i < 10 ; i++){ 
                writer.println("howdy " +  i); 
                String str = reader.readLine(); 
                System.out.println(str); 
            } 
            writer.println("END"); 
        }finally{ 
            System.out.println("closing..."); 
            client.close(); 
        } 
    } 
分享到:
评论

相关推荐

    网上收集的多个Socket编程经典例子源码

    "多线程Socket阻塞模式下通信的例子.rar"可能包含如何在Java或C#中实现多线程处理Socket通信的代码。 6. **Socket应用实例**: - "socket应用小例程.rar"和"Socket开发资料.rar"可能包含了各种Socket编程的实用...

    vc有关SOCKET编程例子

    同时,为了提高效率和可靠性,还可以考虑使用异步I/O或多线程技术。 总的来说,"vc有关SOCKET编程例子"是一个实用的学习资源,它涵盖了网络通信的基础知识,帮助开发者理解和实现基于SOCKET的网络应用。无论是创建...

    C# Socket多线程编程实例

    总结起来,C#的Socket多线程编程实例给我们提供了一个非常实用的网络通信解决方案。通过本文的介绍,相信读者已经对C#在网络编程特别是Socket编程方面的应用有了深入的了解,并能够运用这些知识来设计和实现自己的...

    多线程的例子,超级经典,可以学习学习

    标题中的“多线程的例子,超级经典,可以学习学习”表明这是一个关于多线程编程的示例,可能是通过一个具体的项目或代码实例来演示如何在实际应用中使用多线程技术。多线程是计算机程序设计中的一项重要技能,尤其是...

    vb2010的SOCKET聊天例子

    总之,VB2010的SOCKET聊天例子是一个学习网络编程和Socket通信的实用教程。通过这个实例,开发者可以了解到如何在实际应用中使用Socket来实现客户端与服务器之间的双向通信,以及如何设计一个简单的多用户聊天环境。

    C++ 实现基础SOCKET有例子(局域网聊天)

    在局域网聊天应用中,通常会涉及到多线程或异步处理,以便同时处理多个客户端的连接。这可能需要用到`std::thread`库或者Windows的线程API。同时,为了提高用户体验,可能还需要实现文本编码转换、消息分包与重组、...

    java例子大全 实用版

    首先,Java例子大全涵盖了基础语法、面向对象编程、异常处理、IO流、多线程、网络编程、集合框架、数据库操作等多个关键领域。基础语法包括变量声明、数据类型、运算符、流程控制语句(如if、for、while等)等,这些...

    VC SOCKET 通信小例子

    理解这些基本概念和操作后,开发者可以进一步学习高级主题,如多线程处理客户端连接、异步SOCKET编程、错误处理以及SSL/TLS安全通信等。这个小例子是一个很好的起点,通过实践和扩展,你可以掌握SOCKET通信的核心...

    socket传输图片delphi代码例子

    通过分析和运行这些代码,你可以深入了解Socket编程的具体实现细节,例如如何设置Socket组件,如何处理数据的读写,以及如何在多线程环境中处理并发连接。 总之,"socket传输图片delphi代码例子"提供了一个实用的...

    多线程网络通信演示

    总之,"多线程网络通信演示"是一个实用的C++编程示例,它展示了如何结合TCP协议和多线程技术来构建一个高效的服务器端程序,以处理来自多个客户端的并发连接。通过深入理解并实践这个例子,开发者可以提升在网络编程...

    Java2 实用教程(第五版)课本例子以及习题解答(耿祥义、张跃平编著)

    5. **多线程**:Java支持多线程编程,例子会解释如何创建和管理线程,以及同步机制如synchronized关键字和wait/notify方法。 6. **输入/输出流**:Java的I/O系统允许程序进行文件操作和网络通信。书中例子会演示...

    小型socketDemo

    【描述】提到的"多线程socket例子"表明此程序可能同时处理多个客户端连接。在多线程环境下,服务器可以同时服务于多个并发的客户端请求,提高了系统的并发处理能力。Java Swing库是Java标准版(Java SE)的一部分,...

    SuperSocket(经典实例).zip

    除了基本的通信功能,SuperSocket还提供了许多高级特性,如多线程处理、日志记录、会话管理、自定义协议解析等。这些特性使得SuperSocket能够应对各种复杂的网络应用场景,例如聊天服务器、游戏服务器、数据同步服务...

    Socket编程学习资料 带例子的

    8. **多线程**:在服务器端,通常需要为每个客户端连接创建一个新的线程,以实现并发处理多个客户端请求。这是通过在`ServerSocket`的`accept()`方法上启动新线程来实现的。 9. **性能优化**:了解如何设置Socket...

    tcl实例入门教程(包括常用的socket多线程xml解析数据库操作大量实例)

    - **多线程支持**: TCL支持多线程编程。 - **线程创建**: 使用 `thread::create` 命令来创建新的线程。 - **线程同步**: 提供了锁机制来同步线程之间的操作。 #### 例子: ```tcl package require thread thread::...

    socket编程的资料和例子

    3. **多线程/多进程**:如果存在,可能涉及到如何处理并发连接,使用多线程或多进程来提高服务器性能。 4. **数据编码与解码**:可能包括如何将业务数据转换为字节流进行网络传输,以及在网络另一端接收后如何恢复...

    python3 socket threading fork 多线程+多进程 简单实例

    这篇文章主要讲解了如何在Python3中使用`socket`、`threading`以及`fork`来实现多线程和多进程的简单...同时,对于有经验的开发者,这个例子也提供了一个实用的起点,可以根据需求扩展为更健壮的多线程或多进程服务。

    Java2实用教程(第5版)习题解答及例子代码.zip

    6. **多线程**:Java支持并发编程,通过Thread类和Runnable接口可以创建并管理多个执行线程。习题解答将涵盖同步机制(如synchronized关键字、wait()、notify()方法)和线程通信。 7. **枚举和注解**:枚举是Java中...

    简明Socket编程指南

    此外,Windows Sockets规范还支持多线程的Windows进程,有助于编写出更稳定、高效的程序。 #### 二、Socket编程实例与应用场景 《简明Socket编程指南》不仅阐述了Socket编程的基础知识,还提供了一些实际的编程...

Global site tag (gtag.js) - Google Analytics