//package com.org.Net.tcp; import java.io.BufferedReader; import java.io.FileReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; class LoginClient { public static void main(String[] args) throws Exception { Socket s = new Socket("192.128.11.103", 11110); BufferedReader buf = new BufferedReader( new InputStreamReader(System.in)); PrintWriter out = new PrintWriter(s.getOutputStream(), true); BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); for (int i = 0; i < 3; i++) { String line = buf.readLine(); if (line == null) break; out.println(line); String info = bufIn.readLine(); System.out.println("Info"+info); if(info.contains("欢迎~")) break; } buf.close(); bufIn.close(); } } class UserThread implements Runnable { private Socket s; UserThread(Socket s) { this.s = s; } @Override public void run() { String ip=s.getInetAddress().getHostName(); System.out.println(ip); try { for (int i = 0; i < 3; i++) { BufferedReader bufIn = new BufferedReader( new InputStreamReader(s.getInputStream())); String name = bufIn.readLine();// name BufferedReader bufr = new BufferedReader(new FileReader( "user.txt")); PrintWriter out=new PrintWriter(s.getOutputStream(),true); String line = null; boolean flag = false; while ((line = bufr.readLine()) != null) { if (line.equals(name)) { flag = true; break; } } if(flag){ System.out.println(name+"已登录"); out.println(name+"欢迎光临"); }else { System.out.println(name+"不存在!"); out.println(name+"欢迎光临"); } } s.close(); } catch (Exception e) { throw new RuntimeException("校正失败!"); } } } class LoginServer { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(11110); while (true) { Socket s = ss.accept(); new Thread(new UserThread(s)).start(); } } }
相关推荐
标题中的“多个线程到达后才能执行某个任务,并且只能执行一次”指的是在多线程环境下,需要确保一个任务在所有等待线程都到达特定条件后才开始执行,并且这个任务在整个程序运行过程中只被执行一次。这通常涉及到...
在Revit二次开发中,由于其内置的工作流程是单线程的,这限制了软件的并行处理能力,可能导致在处理大量数据或执行复杂运算时出现性能瓶颈。为了解决这个问题,开发者通常会借助C#语言的多线程技术来提升效率。本文...
在“易语言多线程客户端登陆”这个项目中,我们主要探讨的是如何利用易语言来实现一个支持多线程的客户端登录系统。 首先,我们要理解多线程的概念。在计算机程序中,线程是程序执行的基本单位,每个线程代表程序中...
用户线程的优点是线程的调度不需要内核直接参与,控制简单,可以在不支持线程的操作系统中实现,缺点是同一进程中只能同时有一个线程在运行,如果一个线程使用了系统调用而阻塞,那么整个进程都会被挂起。...
3. **资源消耗少**:单线程程序创建和切换线程的开销较小,对于资源有限的环境更为友好。 然而,单线程也有其局限性: 1. **性能瓶颈**:在多核处理器环境下,单线程程序无法充分利用硬件资源,可能会导致性能瓶颈...
三、用户界面线程 用户界面线程(User Interface Thread)主要负责处理用户的输入和显示界面更新。MFC的主窗口类,如CFrameWnd或CDialog,都是在主线程中创建和管理的,因此用户界面线程通常是主线程。为了保持界面...
在单线程环境中,程序的执行是由一个单一的执行线程控制的,这意味着同一时间只能执行一个任务。这种模型的优点是简单易懂,因为没有线程间的同步问题,降低了出错的可能性。然而,单线程的缺点也很明显,当程序需要...
### MFC多线程的创建详解 #### 一、MFC多线程概述 MFC (Microsoft Foundation Classes) 是微软为简化Windows程序开发提供的一套类库,它封装了Win32 API,使得开发者能够更加方便地进行Windows应用程序的开发。在...
当运行这个程序时,它会创建多个线程,每个线程都会对指定的URL进行多次访问。由于网络请求可能有延迟,所以多线程可以同时进行,从而加快总体的访问速度。然而,需要注意的是,过多的并发请求可能会导致服务器压力...
3. **异步事件**:除了信号和槽,Qt还允许通过postEvent()函数发送自定义事件,从而实现线程间通信。这种方式适用于不直接关联的对象之间的通信,或者当消息需要被插入到接收线程的事件队列时。 4. **Qt并发框架**...
在C#中,由于使用线程和调用UI的线程属于两个不同的线程,如果在线程中直接设置UI元素的属性,此时就会出现跨线程错误。 下面介绍两种解决方案 第一种:使用控件自带的Invoke或者BeginInvoke方法。 Task....
3. **线程结束时的通知机制** 要实现一个线程在结束时异步通知另一个线程,可以利用`std::condition_variable`或`std::atomic`。`std::condition_variable`是一个同步原语,允许线程等待特定条件满足,而`std::...
在编程领域,多线程是实现并发执行任务的重要机制,特别是在资源管理、高效能计算以及用户界面响应等方面具有广泛的应用。易语言作为一款中文编程工具,提供了方便的多线程支持,使得开发者能够轻松地创建并管理多个...
这种方式的优点是每个线程有自己的实例,可以拥有自己的属性和方法,但缺点是每个线程类只能继承一个类,限制了类的继承性。 2. 实现Runnable接口: 创建一个实现了Runnable接口的类,然后在实现的`run()`方法中...
4. **三种线程通信方式结合**: - 在这个示例中,可能结合了同步和异步消息传递、事件对象(如事件句柄)以及信号量等机制。 - 同步消息传递:等待消息被处理后再继续执行,如SendMessage。 - 异步消息传递:发送...
TCP是一种面向连接的、可靠的传输协议,它通过三次握手建立连接,通过序列号和确认应答机制确保数据的顺序性和完整性,通过重传机制保障数据的可靠性。在TCP中,数据被分割成多个数据段,并且每个数据段都会带有相应...
3. **终止线程**: 终止线程是指强制结束线程的执行,使其不再继续运行。在C#中,直接使用`Thread.Abort()`方法可以尝试终止线程。然而,这是一个非常危险的操作,因为线程可能在被终止时正在执行清理工作,如释放...
在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而...
在VC++编程环境中,线程同步是一个至关重要的概念,特别是在多线程程序设计中,以确保并发执行的线程能够安全地访问共享资源,避免数据竞争和其他潜在的问题。本篇文章将详细探讨线程锁在VC++中的应用,以及如何通过...