一个简单的多客户端回答问题服务端,可以自动记录hashmap里没有的问题。
代码很简单,容易看懂 就不做解释了
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Scanner;
public class ServerTest {
public static void main(String[] args) {
ServerTest serverTest=new ServerTest();
HashMap<String, String> quesMap = serverTest.creatMap();
try {
int i=1;
ServerSocket serverSocket=new ServerSocket(8189);
System.out.println("服务端启动,等待客户端连接...");
while (true) {
Socket incoming=serverSocket.accept();
System.out.println("连接数 "+i);
Runnable r =new ThreadHandler(incoming,quesMap);
Thread t = new Thread(r);
t.start();
i++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
public HashMap<String, String> creatMap(){
HashMap<String, String> quesMap= new HashMap<String, String>();
quesMap.put("what is your name?", "my name is otto");
quesMap.put("what is your age?", "i'm 24");
return quesMap;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.HashMap;
import java.util.Scanner;
public class ThreadHandler implements Runnable{
public ThreadHandler(Socket i,HashMap<String, String> hashMap){
this.hashMap=hashMap;
this.incoming=i;
}
public void run() {
try{
try {
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
Scanner inScanner= new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream,true);
out.println("you can type EXIT to exit!");
out.println("**************************");
System.out.println("已经链接!");
boolean done = false;
boolean locked = false;
String key=null;
while (!done && inScanner.hasNextLine()) {
String line=inScanner.nextLine();
System.out.println(line);
if(!locked && hashMap.containsKey(line)){
out.println("Echo :"+hashMap.get(line));
}else{
if(locked==true){
hashMap.put(key,line);
locked=false;
out.println("Echo:问题和答案已经保存!");
}else {
out.println("Echo:抱歉,目前只能回答有限问题!");
out.println("但是系统将记录你的问题,如知道答案,请输入");
key=line;
locked = true;
}
}
if(line.trim().equals("EXIT"))done=true;
}
} finally{
incoming.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
private Socket incoming;
private HashMap<String, String> hashMap;
}
分享到:
相关推荐
在IT行业中,服务器和客户端通信是网络编程的基础,尤其在分布式系统、Web应用以及各种互联网服务中扮演着核心角色。本示例主要涉及的是使用TCP协议进行服务器客户端通信的一个完整案例,适合在Visual Studio 2003 ...
总的来说,这个C# UDP多线程多客户端传输例子展示了如何利用C#的套接字类和多线程技术实现高效的UDP通信。服务端通过监听端口并为每个客户端创建独立的处理线程,确保了并发处理能力;客户端则通过多线程发送和接收...
本文将深入探讨如何使用C++.NET来创建一个简单的网络通信客户端程序。C++.NET结合了C++的强大功能与.NET框架的便利性,为开发高效、跨平台的网络应用提供了可能。 首先,理解网络通信的基本原理至关重要。网络通信...
总的来说,"C# Socket简单例子(服务器与客户端通信)"是一个基础的网络编程教程,旨在帮助开发者了解如何使用C#的Socket类建立简单的TCP连接并进行数据交换。这两个程序为理解Socket通信机制提供了直观的实践,为...
在多客户端通信场景下,服务器需要处理来自多个客户端的连接请求,并确保数据的正确传输。本文档将详细介绍如何利用Linux Socket实现多客户端通信,以及如何结合消息队列和管道进行进程间的通信。 首先,我们需要...
本文将深入探讨如何利用Python的多线程特性实现在TCPServer上的多客户端通信。 首先,让我们理解TCP(传输控制协议)的基本原理。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保了数据包的顺序...
总结来说,`IdTCPServer` 和 `IdTCPClient` 是 Indy 库中用于实现TCP服务器和客户端通信的工具,它们使得开发者能够轻松地构建网络应用程序。通过这个简单的例子,我们可以学习到如何设置和管理服务器与客户端的连接...
在“易语言网络通信例子”这个主题中,我们将深入探讨如何使用易语言进行客户端和服务端的网络通信。 网络通信是计算机科学中的一个重要领域,它涉及两个或多个设备之间的数据交换。在易语言中,我们可以通过构建...
本示例"简单的服务器与客户端聊天例子2"展示了如何使用Delphi编程语言构建一个基础的聊天应用,通过TCP协议进行通信。这里我们将深入探讨相关知识点。 1. **TCP协议**:传输控制协议(TCP)是一种面向连接的、可靠...
这个例子可能涵盖了从网络初始化、TCP连接建立到数据传输的完整流程,是学习和实践STM32以太网TCP客户端通信的宝贵资源。通过分析和运行这个示例,你可以深入理解STM32F407开发板如何与网络进行交互,并为自己的项目...
本教程将深入探讨如何使用WinSock在C++中实现简单的服务端和客户端通信。 首先,我们需要理解网络通信的基本概念。服务端通常是一个持续运行的程序,等待客户端的连接请求,而客户端则会发起连接并发送数据。在TCP/...
4. 接受连接:当有客户端请求连接时,使用`accept()`函数接受连接并返回一个新的套接字,用于与客户端通信。 5. 数据交换:通过新套接字上的`read()`和`write()`函数与客户端交换数据。 6. 关闭连接:完成通信后,...
本例中,我们探讨的是如何使用Python的socket库创建一个简单的服务端(server.py)和客户端(client.py)来实现双向通信。 1. **Python socket基础知识**: - `socket`模块提供了低级网络通信接口,它是基于...
**WCF客户端代码例子** Windows Communication Foundation (WCF) 是微软.NET Framework中用于构建服务导向应用程序的技术。它提供了一种统一的方式,通过网络在不同应用之间交换数据和服务。本示例将详细介绍如何在...
总结来说,"VC6.0客户端和服务器通信例子"这个主题涵盖了网络编程的基础知识,包括TCP/IP通信、套接字编程、客户端-服务器交互以及在VC6.0环境下进行调试。这些技术对于任何从事网络应用开发的程序员来说都是必不可...
本文档提供了一个简单的C# CSocket示例,展示了如何实现服务器与客户端之间的TCP连接通信。在TCP/IP网络编程中,Socket是用于在应用程序之间建立和维护网络连接的关键组件。以下是对示例中涉及的主要知识点的详细...
通过以上步骤,我们可以实现一个基本的多线程ServerSocket服务端和Socket客户端通信案例。需要注意的是,在实际应用中,网络编程可能涉及到网络异常处理、多线程同步、资源管理等诸多细节问题,需要根据具体情况来...
本压缩包包含了一个利用MFC(Microsoft Foundation Classes)实现的UDP通信实例,涵盖了客户端和服务端的代码。 MFC是微软提供的一套C++类库,它将Windows API包装成易于使用的对象,使得开发者能更容易地构建...
本压缩包提供的"OPC客户端的例子"是一个VB6(Visual Basic 6)开发的 OPC DA(Data Access)客户端示例代码,对于初学者来说,是学习如何使用OPC技术连接和交互数据的宝贵资源。 在VB6DAautoSample_v3.1(v5)中,...
通过分析和运行这些例子,读者可以了解到网络游戏客户端编程的关键技术和实现细节。 1. **网络游戏客户端的基本架构**:客户端通常由用户界面、网络通信模块、游戏逻辑模块和资源管理模块组成。这些示例可能涵盖了...