`

(转载)Java Socket实战之一:单线程通信

    博客分类:
  • java
 
阅读更多

现在做Java直接使用Socket的情况是越来越少,因为有很多的选择可选,比如说可以用spring,其中就可以支持很多种远程连接的操作,另外jboss的remoting也是不错的选择,还有Apache的Mina等等,但是在有些时候一些特殊情况仍然逃脱不了直接写Socket的情况,比如公司内部一些莫名其妙的游戏规则。

废话不说了,下面就看看如果自己写Socket应该怎么做吧。

首先是写一个Server类,这个类用来监听10000端口,并从这个端口接收消息然后输出,当收到“bye”时退出。

  1. package com.googlecode.garbagecan.test.socket.sample1;  
  2.  
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.io.PrintWriter;  
  7. import java.net.ServerSocket;  
  8. import java.net.Socket;  
  9.  
  10. public class MyServer {  
  11.     public static void main(String[] args) throws IOException {  
  12.         ServerSocket server = new ServerSocket(10000);  
  13.         Socket socket = server.accept();  
  14.         BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  15.         PrintWriter out = new PrintWriter(socket.getOutputStream());  
  16.           
  17.         while (true) {  
  18.             String msg = in.readLine();  
  19.             System.out.println(msg);  
  20.             out.println("Server received " + msg);  
  21.             out.flush();  
  22.             if (msg.equals("bye")) {  
  23.                 break;  
  24.             }  
  25.         }  
  26.         socket.close();  
  27.     }  

然后是一个Client类,这个类连接上面启动的Server类,然后接收任何用户输入,当遇到回车时发送字符串到Server上,当输入“bye”是退出。

  1. package com.googlecode.garbagecan.test.socket.sample1;  
  2.  
  3. import java.io.BufferedReader;  
  4. import java.io.InputStreamReader;  
  5. import java.io.PrintWriter;  
  6. import java.net.Socket;  
  7.  
  8. public class MyClient {  
  9.     public static void main(String[] args) throws Exception {  
  10.         Socket socket = new Socket("localhost"10000);  
  11.         BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  12.         PrintWriter out = new PrintWriter(socket.getOutputStream());  
  13.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  
  14.  
  15.         while (true) {  
  16.             String msg = reader.readLine();  
  17.             out.println(msg);  
  18.             out.flush();  
  19.             if (msg.equals("bye")) {  
  20.                 break;  
  21.             }  
  22.             System.out.println(in.readLine());  
  23.         }  
  24.         socket.close();  
  25.     }  

最后,首先运行MyServer类,然后MyClient类,然后在MyClient的控制台输入任意字符,可以看到当输入bye是server和client都会退出。

分享到:
评论

相关推荐

    java开发实战经典

    《Java开发实战经典》这本书是Java开发者的重要参考资料,它涵盖了Java编程语言的核心技术和实践应用。以下将详细解析这本书可能涉及的知识点。 1. **Java基础知识**:书中首先会介绍Java的基础概念,包括Java的...

    Java开发实战经典.李兴华

    《Java开发实战经典》是李兴华先生撰写的一本深入浅出的Java编程教程,旨在帮助初学者和有一定基础的开发者提升Java编程技能,并通过实战案例深入理解Java技术体系。这本书涵盖了许多重要的Java知识点,包括但不限于...

    实战突击:Java项目开发案例.完整源码

    6. **网络编程**:Java的Socket编程允许创建客户端和服务端应用,实现网络通信。案例可能涉及TCP和UDP协议的使用。 7. **数据库操作**:Java与数据库的交互通常使用JDBC(Java Database Connectivity)。书中可能...

    java socket服务端和客户端

    Java Socket是Java编程语言中用于网络通信的核心API,它提供了基于TCP/IP协议的低级网络编程接口。在Java中,Socket通常被用来实现客户端(Client)与服务器端(Server)之间的双向通信。在这个"java socket服务端和...

    java socket,javasocket教程

    - Java NIO库(New I/O)提供了一种新的I/O模型,可以在单线程中高效处理多个连接,适合大量并发的服务器。 3. **SSL/TLS安全通信** - Java Socket支持SSL/TLS协议,通过`SSLSocket`和`SSLServerSocket`实现加密...

    java开发实战1200例第一卷

    网络编程是Java的一大强项,书中的实战例子可能会涉及Socket编程,如何建立客户端与服务器之间的通信,以及使用HTTP协议发送和接收数据。此外,线程和并发处理也是Java开发中的重要课题,书中的实例会教授如何管理和...

    Socket服务端实战

    Socket是计算机网络中进程间通信的一种方式,它允许不同设备上的应用程序通过网络交换数据。本实战项目将教你如何创建一个能够接纳多个客户端连接的服务端程序,并且能够实时监控每个客户端的状态。 首先,我们来...

    java开发实战

    Java开发实战是一个面向初学者的实践项目集合,涵盖了多种阶段性的成果,既有正在开发中的半成品,也有已经完成的成品项目。这样的学习资源对于新手来说非常有价值,因为它提供了实际编程经验,有助于理论知识与实际...

    JAVA开发实战经典(源代码).

    《JAVA开发实战经典》是一本深入探讨Java编程技术的书籍,源代码的提供使得读者能够更直观地理解和学习书中的理论知识。Java是一种广泛应用的面向对象的编程语言,以其跨平台、高性能、安全性和可移植性等特性,在...

    JAVA开发实战经典(源代码)

    《JAVA开发实战经典》是一本深受开发者欢迎的书籍,它涵盖了Java编程的众多核心概念和技术。这本书的源代码提供了一种实践和学习Java编程的宝贵资源。以下将围绕Java编程的关键知识点进行详细阐述: 1. **Java语言...

    JAVA项目实战

    1. **面向对象编程**:Java的核心特性之一就是面向对象,你需要设计并实现类和对象,理解封装、继承和多态等概念。 2. **异常处理**:在处理彩票业务逻辑时,可能会遇到各种异常情况,如数据错误、网络问题等,学习...

    socket结合spring的实例

    在Java编程领域,Socket通信和Spring框架的整合是构建分布式系统和实时应用的重要技术。本实例探讨了如何在Spring环境中利用Socket进行网络通信,以实现客户端和服务端的交互。由于提供的压缩包“socket_spring”中...

    《java项目开发实战密码》代码(1-12)

    7. **网络编程**:了解Java的Socket编程,学习如何创建TCP和UDP客户端和服务端,进行网络通信。 8. **数据库操作**:可能涵盖JDBC(Java Database Connectivity),包括连接数据库、执行SQL语句、处理结果集等。 9...

    Socket编程 目录连接.doc

    Java Socket 编程是Java平台提供的一种网络通信方式,主要涉及到Java标准库中的`java.net`包。该包包含了用于创建客户端与服务器之间连接的基本类,如`Socket`、`ServerSocket`等。 **1.2 Socket 类介绍** - **`...

    Java练手小项目——多线程聊天室.zip

    二、线程通信 1. 等待/通知机制:wait()、notify()和notifyAll()是Object类的方法,用于线程间的通信。调用wait()会让当前线程等待,直到其他线程调用notify()或notifyAll()唤醒它。 2. volatile关键字:保证多线程...

    Java语言实战题演总计91道经典例题-金桥java软件工程师培训中心

    Java语言是目前世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。金桥java软件工程师培训中心推出的这91道经典实战题旨在帮助学员深入理解和掌握Java语言的核心概念与技术。以下是对这些实战题目的...

    java开发实战1200例(值得学习)

    "Java开发实战1200例"可能还会包含Java的网络编程,讲解Socket通信、HTTP协议等,这对于开发Web应用或分布式系统非常有用。此外,数据库操作,如JDBC(Java Database Connectivity)的使用,也是必不可少的技能,书...

    魔乐李兴华《Java开发实战经典》源码第九章.ra

    《Java开发实战经典》是李兴华撰写的一本关于Java编程的著作,旨在帮助读者深入理解和掌握Java开发技术。第九章的源码是该书的一个重要组成部分,它提供了实际编程练习和示例,以帮助读者将理论知识转化为实践能力。...

    《Java程序设计之网络编程》

    《Java程序设计之网络编程》是一本专注于Java网络编程的教材,它涵盖了网络通信的基础理论以及Java语言在实现网络应用中的各种技术。该资源包括课件和源码,旨在帮助学习者通过实践来深入理解Java网络编程的核心概念...

    JAVA 网络编程实战.7z

    此外,Java NIO(非阻塞I/O)提供了一种更高效的数据处理方式,通过`Selector`、`Channel`和`Buffer`等类,可以在单线程中处理多个连接,显著提高了网络编程的性能。 在实际项目中,Java网络编程还涉及到异常处理、...

Global site tag (gtag.js) - Google Analytics