上一篇文章说到怎样写一个最简单的Java Socket通信,但是在上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后续Client不能再继续连接,所以需要做些改动,当Server没接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。具体代码如下:
package com.googlecode.garbagecan.test.socket.sample2; 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 MyServer { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(10000); while (true) { Socket socket = server.accept(); invoke(socket); } } private static void invoke(final Socket client) throws IOException { new Thread(new Runnable() { public void run() { BufferedReader in = null; PrintWriter out = null; try { in = new BufferedReader(new InputStreamReader(client.getInputStream())); out = new PrintWriter(client.getOutputStream()); while (true) { String msg = in.readLine(); System.out.println(msg); out.println("Server received " + msg); out.flush(); if (msg.equals("bye")) { break; } } } catch(IOException ex) { ex.printStackTrace(); } finally { try { in.close(); } catch (Exception e) {} try { out.close(); } catch (Exception e) {} try { client.close(); } catch (Exception e) {} } } }).start(); } }
下面是Client程序代码:
package com.googlecode.garbagecan.test.socket.sample2; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class MyClient { public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 10000); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while (true) { String msg = reader.readLine(); out.println(msg); out.flush(); if (msg.equals("bye")) { break; } System.out.println(in.readLine()); } socket.close(); } }
测试,首先运行MyServer类,然后运行两个MyClient类,然后分别在每个MyClient的提示符下输入字符串,就可以看到Server可以分别接收处理每个Client的请求了。
相关推荐
我们将结合"Java Socket实战之二 多线程通信"这篇博文进行深入解析。 首先,了解Socket的基本概念。Socket在计算机网络中扮演着客户端与服务器之间通信的桥梁角色。它提供了低级别的、面向连接的、基于TCP/IP协议的...
在“java socket tcpip多线程网络通信服务器客户端”这个主题中,我们将深入探讨如何使用Java Socket实现基于TCP/IP协议的多线程服务器和客户端通信。 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的...
在本项目中,"Java代码写的局域网多线程TCP、Socket多人聊天室winsock.zip" 是一个基于Java实现的局域网多用户聊天应用。这个应用利用了TCP(Transmission Control Protocol)协议和Socket编程,同时采用了多线程...
Java套接字编程是网络通信的核心技术之一,它允许Java应用程序之间或应用程序与远程服务器之间的双向数据传输。本文将深入探讨Java Socket编程的基础知识、关键概念以及如何在实践中应用。 一、Socket概述 Socket,...
Java Socket是Java编程语言中用于网络通信的核心API,它提供了低级别的、面向连接的、基于TCP/IP协议的网络通信服务。本教程将深入探讨Java Socket的相关知识点,旨在帮助开发者理解和掌握如何在Java环境中构建网络...
通过实战,你可以学习到如何在实际项目中应用Java Socket、多线程和线程池,解决具体问题。 8. **最佳实践**:教程可能还会提供一些最佳实践建议,如如何设计健壮的并发系统,如何处理网络异常,以及如何利用线程池...
Java Socket 多线程编程 Java Socket 是 Java 语言中用于网络编程的 API,提供了基于 TCP/IP 协议的网络通信功能。在 Java 中,使用 Socket 编程可以实现客户端与服务器端之间的数据交换。今天,我们将学习使用 ...
Java Socket通信是网络编程中的基础概念,主要用于两台计算机之间的数据传输。Socket在Java中被封装为类,提供了客户端和服务器端进行双向通信的能力。在这个"java Socket通信实现.zip"的压缩包中,可能包含了关于...
Java Socket是Java编程语言中用于实现网络通信的核心API,它基于TCP/IP协议栈,提供了低级别的网络连接功能。Socket在Java中被广泛用于构建客户端-服务器应用,例如创建Web服务器、聊天应用程序、文件传输等。以下是...
Java Socket网络编程是Java开发中一个重要的组成部分,它允许应用程序通过网络进行通信,实现客户端与服务器之间的数据交换。本教程将深入探讨Java Socket编程的基本概念、原理和实践应用。 一、Socket基本概念 ...
10. **实战应用**:Java Socket通信不仅限于命令行程序,还可以嵌入到Web应用、桌面应用中,例如,WebSocket协议就是基于TCP的Socket实现的,用于在Web浏览器和服务器之间进行全双工通信。 以上是对"基于Java的源码...
6. **多线程**:讲解线程的创建方式(Thread类和Runnable接口)、线程同步(synchronized关键字、wait/notify机制、Lock锁)以及并发工具类如Semaphore、CountDownLatch等。 7. **网络编程**:包括Socket编程,理解...
Java Socket通信是网络编程中的重要组成部分,主要用于实现客户端与服务器之间的双向通信。Socket在Java中提供了TCP(传输控制协议)的编程接口,使得开发者能够构建可靠的、基于连接的数据传输通道。下面将详细介绍...
综上所述,"Java Socket示例"是一个展示如何在Java中使用Socket进行网络通信的基础应用,它涉及到了网络编程、多线程和GUI设计等多个方面,是学习Java网络编程的绝佳起点。通过理解和实践这个示例,开发者可以更好地...
1. **多线程**:服务器端通常需要同时处理多个客户端,可使用多线程技术,每个客户端连接分配一个线程。 2. **NIO(非阻塞I/O)**:Java NIO提供了更高效的数据读写方式,适用于高并发场景。 八、实战练习 1. 创建...
本课件详细介绍了Java Socket编程的基础知识和实战技巧,对于学习和理解网络编程具有极大的帮助。 首先,Socket编程基于TCP/IP协议栈,它提供了低级别的网络通信接口。在Java中,`java.net.Socket`类代表了客户端的...
本书覆盖了Java语言的基础到高级特性,包括面向对象编程、类库使用、异常处理、多线程、网络编程、数据库操作等各个方面。以下是对这些知识点的详细阐述: 1. **Java基础**:书中首先会介绍Java语言的基本语法,如...
Java Socket编程是网络编程的基础,它是Java平台中用于实现客户端-服务器通信的关键组件。本教程将深入浅出地探讨Java Socket编程的核心概念和技术,帮助开发者理解如何构建可靠的网络应用程序。 一、Socket概述 ...
Java Socket 是一种基于TCP/IP协议族的通信方式,它允许两台计算机通过互联网进行双向通信。在Java中,Socket API提供了客户端(Client)和服务器端(Server)的通信接口,使得开发者可以创建出可靠的、基于连接的...
5. Java语言特点:Java是一种面向对象的编程语言,拥有简单的语法结构,避免了复杂的指针操作,支持多线程编程,拥有自动垃圾回收机制,以及相对较高的安全性。其最大的特色是支持跨平台的可移植性。 6. Java中的...