首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java中的多个客户端到服务器通信程序

Java中的多个客户端到服务器通信程序
EN

Stack Overflow用户
提问于 2011-03-24 12:46:11
回答 3查看 51.1K关注 0票数 12

我编写了一个服务器-客户端通信程序,运行良好。

客户端模块

代码语言:javascript
代码运行次数:0
运行
复制
import java.io.*;
import java.net.*;

class Client {
    public static void main(String argv[]) throws Exception {
        String sentence;
        String modifiedSentence;
      while(true){
        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

        Socket clientSocket = new Socket("myname.domain.com", 2343);

        DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        System.out.println("Ready");
        sentence = in.readLine();
        out.writeBytes(sentence + '\n');
        modifiedSentence = in.readLine();
        System.out.println(modifiedSentence);
       }
      clientSocket.close();
    }
}

服务器模块

代码语言:javascript
代码运行次数:0
运行
复制
import java.net.*;

public class Server {
    public static void main(String args[]) throws Exception {
        String clientSentence;
        String cap_Sentence;
        ServerSocket my_Socket = new ServerSocket(2343);

        while(true) {
            Socket connectionSocket = my_Socket.accept();
            BufferedReader in = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            DataOutputStream out = new DataOutputStream(connectionSocket.getOutputStream());
            clientSentence = in.readLine();
            cap_Sentence = "Raceived:" +  clientSentence + '\n';
            out.writeBytes(cap_Sentence);
        }
    }
}

上面是单个客户机-服务器通信的代码,现在我希望多个客户端与服务器交互。我在googled上搜索了一下,发现每个客户端都可以使用一个线程来与服务器对话,但是由于我是初学者,所以我不知道如何实现。所以谁来告诉我该怎么做或者给我一些想法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-24 12:58:00

MainServer类

代码语言:javascript
代码运行次数:0
运行
复制
public class Server {

    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = null;

        boolean listeningSocket = true;
        try {
            serverSocket = new ServerSocket(2343);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 2343");
        }

        while(listeningSocket){
            Socket clientSocket = serverSocket.accept();
            MiniServer mini = new MiniServer(clientSocket);
            mini.start();
        }
        serverSocket.close();       
    }

}

帮助者阶级

代码语言:javascript
代码运行次数:0
运行
复制
public class MiniServer extends Thread{

    private Socket socket = null;

    public MiniServer(Socket socket) {

        super("MiniServer");
        this.socket = socket;

    }

    public void run(){
            //Read input and process here
    }
            //implement your methods here

}
票数 24
EN

Stack Overflow用户

发布于 2011-03-24 12:50:38

你想调查一下Java并发。这就是一个Java程序同时做多件事情的概念。在较高的级别上,您将把while(true) { //... }块作为实现可运行的类的run()方法的一部分来运行。您将创建调用该线程方法的run()实例,可能每个客户机都会调用该方法。

要真正深入地理解Java在并发方面提供的所有内容,请查看Java并发在实践中的应用

票数 3
EN

Stack Overflow用户

发布于 2011-03-24 12:55:55

当我这样做时,我实现了一个管理服务器端的侦听器,所以当客户机(客户机可能不需要更改)连接时,服务器启动一个线程来处理该客户机。

代码语言:javascript
代码运行次数:0
运行
复制
while (!stop)
            {
                socket = serverSocket.accept();
                HiloSocket hiloSocket = new HiloSocket(socket, this);
                hiloSocket.start();
            }

当然,HiloSocket扩展了线程,它有管理客户端的逻辑.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5419328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档