`
miaoge
  • 浏览: 109314 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类

【Socket网络通信】利用TCP/IP协议实现从服务端的文件中读取数据打印到客户端的控制台,服务端对客户端输入过来的数据做出响应

阅读更多

四 .用TCP/IP协议写一个服务器。要求
   1. 客户端一连接上,则向客户端打印三句话
      第一句话:欢迎****(***是客户端的主机的名字),连接****(***服务器端主机的名字)的服务器
      第二句话:您的ip为 *******
      第三句话:继续操作请输入 Y,退出请输入“quit”(输入quit则服务结束)

   2. 如果客户端继续操作输入的是y, 则服务器端返回:
       1.查看dota英雄简介则按1  (然后读取硬盘上的 “dota英雄简介.txt”文件,并在控制台上显示)
       2. 查看dota秘籍请按2  (然后读取硬盘上的 “dota秘籍.txt”文件,并在控制台上显示)

   3.不管何时一旦客户端输入了quit,要求退出系统。

这题只需要你们把服务器写出来,然后在cmd下用telnet命令测试成功就行。

 

下面的是YangKai同学做的,用到了双向通信、内部类,客户端也写出来了,做的很不错,我把有些地方稍微改了(取消了内部类)下贴出来供大家参考。

服务端:

 

 

 

 

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务端
 */
public class ServerCopy {
	private final int PORT = 8888;

	public void start() {
		try {
			ServerSocket ss = new ServerSocket(PORT);
			System.out.println("服务器启动···");
			Socket socket = null;
			while ((socket = ss.accept())!=null) {
				ClientWatcher cw = new ClientWatcher(socket);
				cw.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new ServerCopy().start();
	}
}

class ClientWatcher extends Thread{
	private Socket socket;
	private BufferedReader netBr;
	private PrintStream netPs;

	public ClientWatcher(Socket socket) {
		super();
		this.socket = socket;
		try {
			netBr = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
			netPs = new PrintStream(socket.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	//输出提示方法
	public void print(){
		netPs.println("1.查看dota英雄简介请按1");
		netPs.println("2.查看dota英雄秘籍请按2");
		netPs.println("3.返回上级菜单请按3");
		netPs.println("4.退出请输入quit");
	}

	public void run() {
		try {
			String clientName = socket.getInetAddress().getHostName();
			String clientIp = socket.getInetAddress().getHostAddress();
			netPs.println("欢迎" + clientName + "来到的dota资料服务器");
			netPs.println("您的地址是" + clientIp);
			netPs.println("继续操作请按y,退出请按quit");
			String line = null;
			while ((line = netBr.readLine())!= null) {
				System.out.println("客户端:"+line);
				if ("Y".equalsIgnoreCase(line)) {
					netPs.println("1.查看dota英雄简介则按1");
					netPs.println("2.查看dota英雄秘籍则按2");
					netPs.println("3.退出请按quit");
					while ((line = netBr.readLine())!= null) {
						System.out.println("客户端:"+line);
						if ("1".equalsIgnoreCase(line)) {
							String txt = readFile("e:/peixun/test/dota英雄简介.txt");
							System.out.println("读取英雄简介:"+txt);
							netPs.println(txt);
							print();  //输出提示
						} else if ("2".equalsIgnoreCase(line)) {
							String txt = readFile("e:/peixun/test/dota秘籍.txt");
							System.out.println("读取英雄秘籍:"+txt);
							netPs.println(txt);
							print();   //输出提示
						} else if ("3".equalsIgnoreCase(line)){
							netPs.println("继续操作请按y,退出请按quit");
							break;
						} else if("quit".equalsIgnoreCase(line)){
							System.out.println("与客户端"+clientName+"断开链接!");
							return;
						} else {
							netPs.println("你输入信息错误!");
							print();   //输出提示
						}
					}
				} else if ("quit".equalsIgnoreCase(line)) {
					System.out.println("与客户端"+clientName+"断开链接!");
					break;
				}else {
					netPs.println("你输入信息错误!继续操作请按y,退出请按quit");
				}
			}
			netPs.println("");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				netBr.close();
				netPs.close();
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	private String readFile(String fileName) {
		StringBuffer sb = new StringBuffer();
		try {
			BufferedReader br = new BufferedReader(new FileReader(fileName));
			String line = "";
			while ((line = br.readLine()) != null) {
				sb.append(line);
				sb.append("\r\n");
			}
			br.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
}

 

 

 客户端:

 

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
 * 客户端
 */
public class ClientCopy {

	private final String SERVCE_ADDRESS = "localhost";
	private final int PORT = 8888;

	public void start() {
		try {
			Socket socket = new Socket(SERVCE_ADDRESS, PORT);
			String line = null;
			Scanner scan = new Scanner(System.in);
			PrintStream netPs = new PrintStream(socket.getOutputStream());
			new Watcher(socket).start();
			while ((line = scan.nextLine())!=null) {
				netPs.println(line);
				if("quit".equals(line)) {
					System.out.println("与服务器断开连接!");
					break;
				}
			}
			netPs.close();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new ClientCopy().start();
	}
}

class Watcher extends Thread {
	private Socket socket;
	private BufferedReader netBr;

	public Watcher(Socket socket) {
		super();
		this.socket = socket;
		try {
			netBr = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
		} catch (IOException e) {
			e.printStackTrace();
		}
		this.setDaemon(true);
	}

	public void run() {
		try {
			String line;
			while ((line = netBr.readLine()) != null) {
				System.out.println(line);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				netBr.close();
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 

分享到:
评论

相关推荐

    socket编程,客户端给服务端发送消息

    Socket,又称为“套接字”,是网络编程中的一个抽象接口,它允许两个网络应用程序通过TCP/IP协议进行通信。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,而IP(Internet Protocol)则...

    简单的测试TCPIP通讯

    简单聊天应用通常基于TCP/IP协议,通过创建客户端和服务端的连接来实现信息的双向传递。在本例中,客户端作为信息的发起方,它建立与服务器的连接,然后发送消息。服务端则监听特定端口,等待客户端的连接请求,一旦...

    基于win32控制台的SOCKET通信

    本项目提供了一个简单的基于Win32控制台的SOCKET通信实例,它展示了如何创建客户端和服务端进行双向数据交换的基础步骤。下面将详细介绍这个程序涉及的关键知识点。 1. **Winsock库的初始化** 在进行任何SOCKET...

    SocketCore服务端(控制台应用程序),可以给客户端自动发送消息

    Socket,也被称为套接字,是网络通信中的一个抽象接口,它封装了TCP/IP协议栈,使得开发者可以方便地处理网络数据传输。Socket分为两种类型:流式Socket(Stream Sockets,对应TCP)和数据报Socket(Datagram ...

    socket通信TCP

    Socket通信是计算机网络编程中的重要组成部分,特别是在Java中,它为开发者提供了实现TCP/IP协议的能力。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保数据能够按顺序、无丢失地...

    Socket服务端实战

    Socket服务端实战主要涉及到网络编程的核心概念,尤其是TCP/IP协议栈中的应用层部分。Socket是计算机网络中进程间通信的一种方式,它允许不同设备上的应用程序通过网络交换数据。本实战项目将教你如何创建一个能够...

    最简单的Socket链接

    Socket编程是计算机网络编程中的重要组成部分,特别是在Java中,它提供了基础的TCP/IP通信机制。本文将详细解析“最简单的Socket链接”这一主题,包括客户端和服务端的实现以及交互过程。 首先,我们要理解Socket的...

    C#断点续传(控制台版)

    C#中的Socket类是进行网络通信的基础,它提供了一种低级别的接口来处理TCP/IP协议。在实现断点续传时,我们通常使用TCP协议,因为它提供了面向连接的服务,保证了数据的顺序和完整性。 以下是实现断点续传的关键...

    利用C# Socket 实现HTTP WEB服务器

    它基于TCP/IP通信协议来交换数据,定义了客户端(浏览器)和服务器之间的交互方式。 在C#中实现HTTP服务器,我们需要创建一个Socket实例来监听特定端口上的连接请求。首先,我们导入System.Net和System.Net.Sockets...

    SOCKET 一个简单的聊天程序

    在TCP/IP协议栈中,Socket提供了在网络层、传输层和应用层之间的一个抽象层,使得程序员可以方便地处理网络通信。 在这个简单的聊天程序中,“服务器聊天.exe”扮演着服务端的角色,它负责监听特定的端口,等待...

    java sokect

    Socket是TCP/IP协议族中的一个概念,它提供了一种可靠的、基于字节流的两台主机间通信的端点模型。在这个聊天室的例子中,我们将会讨论如何利用Java Socket创建一个简单的控制台聊天应用。 首先,我们需要理解...

    Socket 端口的监听与输入

    在描述中提到的"客户端对服务端的端口进行数据的传输,服务端对该端口进行监听并显示该值",实际上就是这个过程的简化版。客户端通过Socket连接到服务端的特定端口,发送数据,而服务端通过监听该端口,接收到来自...

    网络编程服务端

    Socket基于TCP/IP协议栈,允许不同网络上的两台计算机进行通信。在服务端,Socket用于监听客户端的连接请求,并处理这些请求。在客户端,Socket则用于建立与服务端的连接并发送数据。 3. **Socket工作流程**: - *...

    java编写的简单c/s通讯程序

    - 在主循环中不断读取客户端发送的数据,并将其打印出来,然后再向客户端发送消息。 #### 三、程序运行流程 1. **服务端启动**: - 创建`ServerSocket`实例监听指定端口。 - 等待客户端连接。 2. **客户端启动**:...

    VB.NET Socket简单实例

    在VB.NET编程环境中,Socket是实现网络通信的重要工具,它基于TCP/IP协议栈,用于创建客户端和服务器端的连接。本实例将详细讲解如何利用VB.NET实现一个简单的Socket聊天程序,包括服务端和客户端的搭建。 首先,...

    c#版socket实例

    Socket是TCP/IP协议族的一部分,用于在两台计算机之间建立可靠的、基于字节流的数据传输连接。在这个实例中,我们将看到如何使用C#的System.Net.Sockets命名空间来创建服务端和客户端程序。 描述中提到,“vs2008...

    JAVA文件传输(+源代码).rar

    Socket是TCP/IP通信的基础,它为两台机器间的通信提供了一个端点。ServerSocket用于监听客户端的连接请求,Socket则代表一个实际的连接。在文件传输中,服务器创建ServerSocket,等待客户端的Socket连接,然后通过...

    JAVASocket实现聊天

    在这个场景中,我们使用Java Socket来构建一个简单的聊天系统,该系统能够实现客户端和服务端之间的实时信息交互。 在Java中,Socket类位于`java.net`包下,是TCP/IP通信的基础。它提供了低级的、面向连接的、基于...

    C#+WinForm+局域网文件传输

    3. **局域网文件传输原理**:局域网(LAN)文件传输通常通过TCP/IP协议实现,利用Socket编程来创建客户端和服务器之间的连接。文件被分割成数据块,通过网络发送,接收端重新组装数据块恢复文件。 4. **C#中的...

Global site tag (gtag.js) - Google Analytics