创建一个EchoServer和一个EchoClient类,EchoServer用于从监听从客户端输入的字符串,当客户端输入"bye"时停止
package com.test.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
private int port = 8000;
private ServerSocket serverSocket;
public static void main(String[] args) throws IOException {
new EchoServer().service();
}
public EchoServer() throws IOException {
serverSocket = new ServerSocket(port);
System.out.println("服务器启用");
}
public String echo(String msg) {
return "echo: " + msg;
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void service(){
while(true){
Socket socket = null;
try{
socket = serverSocket.accept();
System.out.println("new connection accepted "
+ socket.getInetAddress() + ":" + socket.getPort());
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
String msg = null;
while((msg =br.readLine()) != null){//输入,读取客户端的输入
System.out.println(msg);
pw.println(echo(msg));//输出,返回到客户端
if(msg.endsWith("bye")){
break;
}
}
}catch (Exception e) {
e.printStackTrace();
}finally{
try{
if(socket != null){
socket.close();
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
package com.test.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class EchoClient {
private String host = "localhost";
private int port = 8000;
private Socket socket;
public EchoClient() throws UnknownHostException, IOException {
socket = new Socket(host,port);
}
public static void main(String[] args) throws UnknownHostException, IOException{
new EchoClient().talk();
}
private PrintWriter getWriter(Socket socket)throws IOException{
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut,true);
}
private BufferedReader getReader(Socket socket)throws IOException{
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void talk()throws IOException{
try{
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
String msg = null;
while((msg = localReader.readLine()) !=null ){//读取在管理控制台输入的字符串
pw.println(msg);//向服务器端传送字符串
System.out.println(br.readLine());//读取服务器端返回的字符串
if(msg.equals("bye")){
break;
}
}
}catch (Exception e) {
e.printStackTrace();
}finally{
try{
socket.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
Socket编程是网络编程的基础,主要用于实现两个网络节点之间的通信。在这个实验报告中,我们主要探讨了如何使用Java的Socket和ServerSocket类进行TCP协议的客户端和服务器端编程。 实验目标是掌握Socket编程的基本...
本压缩包文件包含的"socket应用小例程源代码"将为我们揭示Socket编程的基本原理和实践技巧。 首先,让我们理解Socket的定义。Socket在操作系统层面上是一个抽象接口,它提供了一种标准的方式来实现不同网络上的进程...
### C# Socket编程详解 在IT领域,网络通信是实现数据交换和远程操作的基础技术之一。C#作为一种广泛使用的编程语言,在.NET框架下提供了强大的网络编程功能,其中Socket编程是进行网络通信的核心技术之一。本篇...
在IT领域,网络通信是不可或缺的一部分,而Socket编程则是实现这一功能的核心技术。本文将深入讲解如何进行Socket客户端编程,以TCP协议为例,基于提供的"TCP_Client"文件名称,我们将探讨TCP客户端的基本步骤。 ...
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯...
以一个电话网为例:电话的通话双方相当于相互通信的2个程序,电话号码就是ip地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向...
在Windows环境下进行Socket编程,主要用于实现网络通信,例如创建远程控制程序。Socket接口提供了一种标准的方法,使得运行在不同机器上的应用程序可以通过网络进行数据交换。在这个案例中,使用Visual Studio 2013...
本文将深入探讨如何在Linux环境下实现多线程的阻塞模式socket编程,以及它的工作原理和应用价值。 首先,理解“阻塞”和“非阻塞”模式。在Linux的socket编程中,阻塞模式是指当一个套接字(socket)调用如recv或...
在IT领域,网络编程是不可或缺的一部分,而C#语言提供了强大的Socket编程支持。本文将深入探讨C#中的Socket异步通信机制,以及如何利用它来实现一个简单的聊天应用。我们将分别解析服务器端(chatServer)和客户端...
以TCP为例,Socket编程的基本步骤如下: 1. 服务器端首先创建一个Socket,然后将其绑定到一个特定的端口。这个过程通过`bind()`函数完成。 2. 绑定后的Socket需要开始监听连接请求,使用`listen()`函数进入监听状态...
在本例中,我们将创建一个控制台服务器端和一个 web 客户端,使用 Socket 编程技术实现它们之间的通信。 一、C# Socket 编程技术概述 C# Socket 编程技术是指使用 C# 语言实现的 Socket 编程技术,用于创建网络...
Socket编程在IT行业中是网络通信的基础,特别是在ASP.NET框架下,它允许开发者创建高性能、低级别的网络应用程序。本文将深入探讨Socket编程的概念、在ASP.NET中的应用,以及如何实现简单的发送和接收消息功能,包括...
Java Socket 编程实现的简单多线程 WEB 服务器 ...1. Java Socket 编程的基础知识 2. ServerSocket 和 Socket 的使用 3. 多线程编程在服务器端的应用 4. HTTP 协议的基础知识 5. PrintWriter 对象的使用
本文将根据标题《socket编程总结.pdf》和描述中的内容,详细讲解Socket编程的关键步骤,并以TCP协议为例进行阐述。 首先,Socket编程通常涉及两个主要角色:服务器端和客户端。在Windows环境下,使用Socket API需要...
Socket编程是网络编程的基础,主要涉及应用进程间的通信。Python作为一门多用途语言,也提供了丰富的Socket库支持Socket编程。本实验旨在帮助学习者理解Socket通信的基本原理,并掌握Python中的Socket编程方法。 ...
socket网络编程C++版小实验,有客户端和服务器端的源代码。 socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两...
在C#中,`System.Net.Sockets.Socket`类是进行Socket编程的主要接口。创建Socket对象时,我们需要指定它的地址族(如IPv4或IPv6)、套接字类型(如流式或数据报)以及协议(如TCP或UDP)。 在描述中提到的"在同一或...
5、网络编程:本书对Python中的网络编程进行了深入探讨,涵盖了socket编程、HTTP编程、FTP编程等方面的内容。读者可以通过学习这些内容快速掌握Python中的网络编程。 6、多线程编程:本书对Python中的多线程编程...
### Android中的Socket编程详解 #### 一、引言 在移动互联网时代,应用程序之间的网络通信变得尤为重要。Android作为主流的移动操作系统之一,在进行网络通信时提供了多种方式,其中Socket编程是一种非常基础且...
"Java编程200例(附:JAVA文档完全解读中文版)"是一个非常适合初学者和进阶者的学习资源,它提供了丰富的实例来帮助理解Java的核心概念和技术。 这200个编程实例涵盖了Java语言的基础到高级主题,包括但不限于: ...