`

[转]Java Socket实战之一 单线程通信

 
阅读更多

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

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

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

 

package com.googlecode.garbagecan.test.socket.sample1;

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);
		Socket socket = server.accept();
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintWriter out = new PrintWriter(socket.getOutputStream());
		
		while (true) {
			String msg = in.readLine();
			System.out.println(msg);
			out.println("Server received " + msg);
			out.flush();
			if (msg.equals("bye")) {
				break;
			}
		}
		socket.close();
	}
}

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

package com.googlecode.garbagecan.test.socket.sample1;

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的控制台输入任意字符,可以看到当输入bye是server和client都会退出。

分享到:
评论

相关推荐

    java开发实战经典

    7. **网络编程**:包括Socket编程,理解TCP和UDP协议,创建服务器端和客户端的通信程序。 8. **反射机制**:学习如何在运行时动态获取类的信息并操作类的对象,包括Class类的使用、构造函数、方法和字段的反射调用...

    java socket,javasocket教程

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

    java socket服务端和客户端

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

    java开发实战1200例第一卷

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

    Java开发实战经典.李兴华

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

    Socket服务端实战

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

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

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

    JAVA项目实战

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

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

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

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

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

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

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

    java开发实战

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

    JAVA 网络编程实战.7z

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

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

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

    java开发实战1200例

    《Java开发实战1200例》是一本深入实践的编程书籍,专注于通过大量实例来提升读者的Java编程技能。书中的例子涵盖了基础语法、面向对象编程、异常处理、集合框架、多线程、网络编程、数据库操作、GUI设计等多个核心...

    socket结合spring的实例

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

    java socket编程

    - Java NIO(New I/O)提供了更高效的I/O模型,可以实现单线程处理多个客户端连接,使用Selector和Channel等组件。 - 对于高并发场景,NIO可以显著提升性能。 7. **SSL/TLS安全套接层** - Java提供JSSE(Java ...

    Java开发实战从入门到精通视频教程下载第19章 Java网络编程.zip

    总之,Java开发实战从入门到精通的第19章将带你全面探索Java在网络编程领域的强大功能,从基础的Socket通信到高级的并发和安全策略,每一步都将加深你对网络编程的理解,提升你的开发技能。通过视频教程的形式,学习...

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

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

    Java TCP_IP Socket编程.rar

    Java NIO库提供了一种更有效的方式来处理Socket通信,尤其是对于高并发场景。它引入了选择器(Selector)和通道(Channel)的概念,允许单线程管理多个连接。 九、实战示例 压缩包中的"Java TCP/IP Socket编程.pdf...

Global site tag (gtag.js) - Google Analytics