package com.aspire.smart.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread extends Thread {
private static int number = 0; // 保存本进程的客户计数
Socket socket = null; // 保存与本线程相关的Socket对象
public ServerThread(Socket socket, int clientnum) {
this.socket = socket;
number = clientnum;
System.out.println("当前在线的用户数: " + number);
}
public void run() {
try {
// 由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
// 由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter out = new PrintWriter(socket.getOutputStream());
// 由系统标准输入设备构造BufferedReader对象
BufferedReader sysin = new BufferedReader(new InputStreamReader(
System.in));
// 在标准输出上打印从客户端读入的字符串
System.out.println("[Client " + number + "]: " + in.readLine());
String line; // 保存一行内容
// 从标准输入读入一字符串
line = sysin.readLine();
while (!line.equals("bye")) { // 如果该字符串为 "bye",则停止循环
// 向客户端输出该字符串
out.println(line);
// 刷新输出流,使Client马上收到该字符串
out.flush();
// 在系统标准输出上打印读入的字符串
System.out.println("[Server]: " + line);
// 从Client读入一字符串,并打印到标准输出上
System.out.println("[Client " + number + "]: " + in.readLine());
// 从系统标准输入读入一字符串
line = sysin.readLine();
}
out.close(); // 关闭Socket输出流
in.close(); // 关闭Socket输入流
socket.close(); // 关闭Socket
} catch (Exception e) {
System.out.println("Error. " + e);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package com.aspire.smart.util;
import java.net.ServerSocket;
/**
* 服务器端Socket
*
* @author Administrator
*
*/
public class SocketServer {
/**
* 服务器端Socket构造方法
*/
public SocketServer() {
try {
int clientcount = 0; // 统计客户端总数
boolean listening = true; // 是否对客户端进行监听
ServerSocket server = null; // 服务器端Socket对象
try {
// 创建一个ServerSocket在端口2121监听客户请求
server = new ServerSocket(2121);
System.out.println("Server starts...");
} catch (Exception e) {
System.out.println("Can not listen to. " + e);
}
while (listening) {
// 客户端计数
clientcount++;
// 监听到客户请求,根据得到的Socket对象和客户计数创建服务线程,并启动之
new ServerThread(server.accept(), clientcount).start();
}
} catch (Exception e) {
System.out.println("Error. " + e);
}
}
/**
* 主方法
*
* @param args
*/
public static void main(String[] args) {
new SocketServer();
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package com.aspire.smart.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 客户端Socket
*
* @author Administrator
*
*/
public class SocketClient {
/**
* 客户端Socket构造方法
*/
public SocketClient() {
try {
// 向本机的2121端口发出客户请求
Socket socket = new Socket("localhost", 2121);
System.out.println("Established a connection...");
// 由系统标准输入设备构造BufferedReader对象
BufferedReader sysin = new BufferedReader(new InputStreamReader(
System.in));
// 由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter out = new PrintWriter(socket.getOutputStream());
// 由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
String line; // 保存一行内容
// 从系统标准输入读入一字符串
line = sysin.readLine();
while (!line.equals("bye")) { // 若从标准输入读入的字符串为 "bye"则停止循环
// 将从系统标准输入读入的字符串输出到Server
out.println(line);
// 刷新输出流,使Server马上收到该字符串
out.flush();
// 在系统标准输出上打印读入的字符串
System.out.println("[Client]: " + line);
// 从Server读入一字符串,并打印到标准输出上
System.out.println("[Server]: " + in.readLine());
// 从系统标准输入读入一字符串
line = sysin.readLine();
}
out.close(); // 关闭Socket输出流
in.close(); // 关闭Socket输入流
socket.close(); // 关闭Socket
} catch (Exception e) {
System.out.println("Error. " + e);
}
}
/**
* 主方法
*
* @param args
*/
public static void main(String[] args) {
new SocketClient();
}
}
分享到:
相关推荐
在这个“Java Socket使用实例”中,我们将探讨如何创建一个简单的Java Socket应用,它包括一个服务器端和一个客户端,两者通过Socket进行数据交换,将信息显示在窗口中。 首先,让我们了解Socket的基本概念。Socket...
在"JAVA SOCKET 编码实例"中,我们可能遇到以下关键知识点: 1. **ServerSocket创建与监听**:首先,服务器端需要创建一个ServerSocket对象,指定一个端口号,然后调用其`accept()`方法开始监听。`accept()`方法会...
学习这些Java Socket编程实例,有助于理解TCP/IP通信的基本原理,为构建实际的网络应用程序打下坚实的基础。你可以通过调试和修改`SocketTest`代码,进一步探索和实践Socket编程的不同场景,如文件传输、聊天应用等...
### Java Socket编程详解及实例分析 #### 一、Socket编程基础概述 在计算机网络通信领域,Socket编程是一种广泛使用的通信方式。它为不同主机上的进程提供了双向通信的能力,是网络编程的基础之一。Java语言提供了...
一旦有客户端连接,ServerSocket会接受连接并创建一个新的Socket实例来处理这个特定的通信通道。客户端则通过Socket类建立到服务器的连接,并通过这个连接发送和接收数据。 在"SimpleChatroom"这个例子中,我们可能...
java socket 实现简单的客户端和服务端通信
虽然题目中的部分内容提到了客户端使用FlexBuilder3,但由于这部分信息不完整且与Java Socket编程直接关联不大,这里仅讨论如何使用Java实现客户端。 ##### 4.1 客户端代码框架 ```java import java.net.Socket; ...
"Java Socket 长连接实例"是关于如何实现一个持久连接的服务器和客户端程序的示例,这种连接能够保持开放,直到一方明确地关闭它。这在需要频繁通信或者需要长时间保持连接状态的应用场景中非常有用,比如聊天应用、...
Java Socket 实例是Java网络编程中的重要组成部分,用于实现客户端与服务器之间的通信。在这个实例中,我们关注的是服务器端的多线程应用,这在处理多个并发连接时尤其有用。多线程允许服务器同时处理多个客户端请求...
10. **设计模式**:在实现文件上传服务时,可以借鉴设计模式,如工厂模式用于创建数据库连接,单例模式用于保证服务器Socket实例的唯一性,观察者模式用于通知文件上传完成后的后续处理等。 以上就是使用Java ...
最经典的java socket实例大全 最经典的java socket实例大全
在这个“Java Socket 多线程实例”中,我们将会探讨如何结合这两个关键概念来创建一个聊天服务器和客户端应用。 首先,`ChatServer.java` 文件通常包含了服务器端的代码。在Java中,通过`java.net.ServerSocket` 类...
Python与Java间Socket通信实例代码详解 Python与Java间Socket通信是指在Python和Java两个不同的语言平台之间实现数据交换和通信的过程。Socket是Python和Java中都支持的网络通信机制,可以实现跨语言平台的通信。 ...
本实例压缩包包含了一系列的Java Socket编程示例,旨在帮助开发者深入理解和掌握Socket编程的核心概念与技术。 Socket在Java中被定义为`java.net.Socket`类和`java.net.ServerSocket`类。Socket编程通常涉及两个...
1. **创建SSLSocket实例** 首先,我们需要使用`SSLServerSocketFactory`和`SSLContext`来创建一个`SSLSocket`实例。这通常涉及到加载信任的证书、配置SSL上下文以及设置服务器和客户端的SSL参数。例如: ```java...
当一个客户端(使用Socket)尝试连接到该端口时,ServerSocket会创建一个新的Socket实例来处理这个连接。这被称为“三次握手”过程,是TCP连接建立的标准步骤。 视频流转发的核心在于接收来自一个源的视频数据,...
Java Socket 实例与 JDBC 实例详解 在 Java 编程领域,Socket 和 JDBC 是两个非常重要的概念,尤其对于初学者和中级开发者来说,理解和掌握它们是提升技能的关键步骤。Socket 提供了网络通信的基础,而 JDBC 则是 ...
Java Socket编程是Java平台中用于实现网络通信的核心API,它基于TCP/IP协议栈,提供了低级别的、面向连接的、可靠的字节流通信。在本文中,我们将深入探讨Java Socket编程的关键概念、工作原理以及如何创建服务端和...
完整的Socket通信过程包括四个步骤: 1. 建立网络连接:客户端发起连接请求,服务器端监听并响应,生成新的Socket。 2. 打开Socket的输入/输出流:获取Socket的I/O流,为数据传输做好准备。 3. 数据读写:通过输入流...