`

Socket 编程—多个客户端

阅读更多

        在Socket编程 - 单个客户端中,服务端只支持单个客户端的连接请求。 

        如果有多个客户端连接呢?需要有一个线程一直监听客户端请求,收到请求后分发给其它的线程处理。这和jetty的处理方式类似,只需要改动服务端的代码就可以了。 

服务端: 

package com.bijian.study02;

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

public class MyMultiClientsServer {

    private static final int SERVER_PORT = 4451;
    ServerSocket server;
    Socket socket;

    public MyMultiClientsServer() {
        try {
            server = new ServerSocket(SERVER_PORT);

            while (true) {
                socket = server.accept();
                new DispatchRequestThread(socket).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // Release the resources opened
        }
    }

    class DispatchRequestThread extends Thread {

        BufferedReader in;
        PrintWriter out;
        Socket socket;

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

        @Override
        public void run() {
            try {
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                out = new PrintWriter(socket.getOutputStream(), true);

                while (true) {
                    String str = in.readLine();
                    System.out.println(socket.getPort() + ": " + str);
                    out.println("Received: " + str);

                    if (str.equals("end")) {
                        break;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // Release the resources opened
            }
        }
    }

    public static void main(String[] args) {
        new MyMultiClientsServer();
    }
}

客户端:(完全同Socket 编程—单个客户端中的客户端)

package com.bijian.study02;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class MyClient {

    Socket connection;
    BufferedReader in;
    PrintWriter out;
    BufferedReader reader;

    public MyClient() {

        try {
            // Establish a connection to the Socket server
            connection = new Socket(InetAddress.getLocalHost(), 4451);

            // Construct a reader to get the response from the server
            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

            // Construct a writer to send messages to the server
            out = new PrintWriter(connection.getOutputStream());

            // Construct a reader to accept the user input
            reader = new BufferedReader(new InputStreamReader(System.in));

            // Continuously send out the messages to the server and receive the response 
            while (true) {
                String str = reader.readLine();
                out.println(str);
                out.flush();
                System.out.println("sent out: " + str);

                if (str.equals("end")) {
                    break;
                }

                System.out.println(in.readLine());
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // Release the resources - omitted
        }
    }

    public static void main(String[] args) {
        new MyClient();
    }
}

        开启服务端后,开启多个客户端进行测试,结果如下: 

客户端1:

hello
sent out: hello
Received: hello
boy
sent out: boy
Received: boy
bye
sent out: bye
Received: bye
end
sent out: end

客户端2:

hello
sent out: hello
Received: hello
girl
sent out: girl
Received: girl
bye
sent out: bye
Received: bye
end
sent out: end

服务端:

51373: hello
51373: boy
51377: hello
51377: girl
51373: bye
51377: bye
51377: end
51373: end

 

文章来源:http://czj4451.iteye.com/blog/1466091

分享到:
评论

相关推荐

    基于TCP的Socket编程服务器和客户端代码

    Java的`java.nio`包提供了非阻塞I/O的支持,可以同时处理多个客户端连接,提高了服务器的并发能力。 总结起来,基于TCP的Socket编程是构建网络应用的基础,涉及网络连接的建立、数据的可靠传输和通信链路的维护。...

    基于socket的客户端与服务器聊天

    在这个项目中,服务器端(server)设计为可以同时处理多个客户端连接,这涉及到了多线程或者异步IO的概念。当一个客户端连接到服务器时,服务器会在一个新的线程或使用异步处理来处理这个连接,以保持对其他客户端的...

    c++实现socket:一个服务器对应多个客户端相互传递信息

    标题 "c++实现socket:一个服务器对应多个客户端相互传递信息" 指的是利用C++的socket API创建一个服务器程序,该服务器可以同时处理来自多个客户端的连接请求,并允许这些客户端之间交换数据。这种设计模式通常称为...

    C++实现简单Socket编程,多客户端登陆以及检测客户端状态

    本教程将通过标题"“C++实现简单Socket编程,多客户端登陆以及检测客户端状态”"深入讲解如何使用C++进行Socket编程,包括多线程服务器的实现、TCP与UDP数据传输以及管理多个客户端连接。 首先,我们需要理解Socket...

    socket 一个服务器对应多个客户端使用多线程

    在标题"socket 一个服务器对应多个客户端使用多线程"中,提到的是使用Socket编程来设计一个服务器,该服务器能够同时处理来自多个客户端的连接请求,这通常被称为“一对一”或“一对多”模型。在Linux环境下,这种...

    VC6.0 socket编程,多客户端,单服务器,网络编程

    为了处理多个客户端,服务器需要在一个循环中调用`accept()`,每次新的连接到来都会创建一个新的Socket实例。 客户端则需要创建Socket,并使用`connect()`函数尝试连接到服务器的指定IP和端口。一旦连接成功,...

    c#多线程socket开发(一个服务器对多个客户端)

    C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。这里,我们将详细讲解如何使用C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。 多线程Socket服务器...

    MFC:Socket编程—TCP服务端和多个客户端通信 示例代码

    在本文中,我们将深入探讨MFC(Microsoft Foundation Classes)中的Socket编程,特别是如何实现一个TCP服务端与多个客户端之间的通信。MFC是微软提供的一套C++类库,用于简化Windows应用程序开发,其中包括对网络...

    TCPSocket编程客户端和服务端

    例如,服务器可能需要使用线程池或事件驱动模型来并发处理来自多个客户端的请求。 压缩包文件"TCPSocket"可能包含了示例代码,这些代码可以帮助初学者更好地理解TCP Socket编程的实践。通过阅读和运行这些代码,你...

    C#使用Socket实现服务器与多个客户端通信(简单的聊天系统)

    在本文中,我们将深入探讨如何使用C#编程语言通过Socket实现一个简单的聊天系统,使得服务器可以与多个客户端进行通信。Socket在计算机网络编程中扮演着重要角色,它提供了进程间通信(IPC)的能力,允许不同计算机...

    java socket编程 服务器和客户端

    如果服务器需要同时处理多个客户端的连接,可以考虑使用多线程或者Java的`ExecutorService`来为每个新连接创建一个新的处理线程,以避免阻塞其他客户端的连接请求。 以上就是Java Socket编程中服务器和客户端交互...

    Java编程Socket实现多个客户端连接同一个服务端代码

    Java编程Socket实现多个客户端连接同一个服务端代码 Java编程Socket实现多个客户端连接同一个服务端代码是Java编程中的一种常见应用场景。该代码主要介绍了如何使用Java Socket实现多个客户端连接同一个服务端,...

    socket C# 服务器和客户端 图形界面

    Socket编程在IT领域中是网络通信的基础,尤其是在C#中,它提供了强大的工具来构建服务器和客户端应用程序。本文将深入探讨“socket C# 服务器和客户端 图形界面”这一主题,帮助你理解如何利用C#的Socket类创建交互...

    socket编程,客户端给服务端发送消息

    这些数据会被分割成多个TCP数据段,并在网络中传输。 4. **消息接收**:服务端通过`accept()`函数接受客户端的连接请求,返回一个新的Socket用于与该客户端通信。然后,服务端可以使用`recv()`或`read()`函数从这个...

    socket客户端,可连接多个服务器

    总的来说,这个"socket客户端,可连接多个服务器"的实现涉及了Socket编程的基础,TCP连接的建立与恢复,以及客户端的错误处理和重连策略。理解这些知识点对于开发分布式系统、网络应用或者其他需要网络通信的项目都...

    SOCKET编程之TCP客户端

    本篇主要探讨的是"SOCKET编程之TCP客户端",这涉及到如何使用SOCKET接口创建一个能够与服务器建立TCP(Transmission Control Protocol)连接的客户端程序。TCP是一种面向连接、可靠的传输协议,确保数据的正确性与...

    MFC_Socket_VS2010编程(客户端+服务器端).rar

    此外,为了提高性能和用户体验,可以考虑使用多线程或者异步Socket模型,使服务器能够同时处理多个客户端的连接请求。 这个示例代码是一个很好的学习起点,它展示了如何在MFC环境中使用Socket进行基本的客户端-...

    vc ,socket编程含客户端和服务端

    VC还支持异步socket编程,通过I/O完成端口(IOCP)或 overlapped I/O,可以在非阻塞模式下处理多个并发连接,提高程序性能。 7. **错误处理**: 在每个关键步骤后,应检查返回值并使用`WSAGetLastError`获取错误...

    socket编程 TCP文件的传输实现 客户端和服务端

    在IT领域,网络通信是不可或缺的一部分,而Socket编程则是实现这一目标的核心技术。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它保证了数据的有序、无损传输。本资源旨在帮助初学者...

    C++Socket编程实例(服务端跟客户端通信).rar

    5. **多线程或异步处理**:在实际应用中,服务器可能会同时处理多个客户端的连接请求,这可能需要使用多线程或者异步IO模型,如 select、poll 或者 epoll 等。 6. **错误处理**:在编写 Socket 程序时,需要对可能...

Global site tag (gtag.js) - Google Analytics