四 .用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,又称为“套接字”,是网络编程中的一个抽象接口,它允许两个网络应用程序通过TCP/IP协议进行通信。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,而IP(Internet Protocol)则...
简单聊天应用通常基于TCP/IP协议,通过创建客户端和服务端的连接来实现信息的双向传递。在本例中,客户端作为信息的发起方,它建立与服务器的连接,然后发送消息。服务端则监听特定端口,等待客户端的连接请求,一旦...
本项目提供了一个简单的基于Win32控制台的SOCKET通信实例,它展示了如何创建客户端和服务端进行双向数据交换的基础步骤。下面将详细介绍这个程序涉及的关键知识点。 1. **Winsock库的初始化** 在进行任何SOCKET...
Socket,也被称为套接字,是网络通信中的一个抽象接口,它封装了TCP/IP协议栈,使得开发者可以方便地处理网络数据传输。Socket分为两种类型:流式Socket(Stream Sockets,对应TCP)和数据报Socket(Datagram ...
Socket通信是计算机网络编程中的重要组成部分,特别是在Java中,它为开发者提供了实现TCP/IP协议的能力。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保数据能够按顺序、无丢失地...
Socket服务端实战主要涉及到网络编程的核心概念,尤其是TCP/IP协议栈中的应用层部分。Socket是计算机网络中进程间通信的一种方式,它允许不同设备上的应用程序通过网络交换数据。本实战项目将教你如何创建一个能够...
Socket编程是计算机网络编程中的重要组成部分,特别是在Java中,它提供了基础的TCP/IP通信机制。本文将详细解析“最简单的Socket链接”这一主题,包括客户端和服务端的实现以及交互过程。 首先,我们要理解Socket的...
C#中的Socket类是进行网络通信的基础,它提供了一种低级别的接口来处理TCP/IP协议。在实现断点续传时,我们通常使用TCP协议,因为它提供了面向连接的服务,保证了数据的顺序和完整性。 以下是实现断点续传的关键...
它基于TCP/IP通信协议来交换数据,定义了客户端(浏览器)和服务器之间的交互方式。 在C#中实现HTTP服务器,我们需要创建一个Socket实例来监听特定端口上的连接请求。首先,我们导入System.Net和System.Net.Sockets...
在TCP/IP协议栈中,Socket提供了在网络层、传输层和应用层之间的一个抽象层,使得程序员可以方便地处理网络通信。 在这个简单的聊天程序中,“服务器聊天.exe”扮演着服务端的角色,它负责监听特定的端口,等待...
Socket是TCP/IP协议族中的一个概念,它提供了一种可靠的、基于字节流的两台主机间通信的端点模型。在这个聊天室的例子中,我们将会讨论如何利用Java Socket创建一个简单的控制台聊天应用。 首先,我们需要理解...
在描述中提到的"客户端对服务端的端口进行数据的传输,服务端对该端口进行监听并显示该值",实际上就是这个过程的简化版。客户端通过Socket连接到服务端的特定端口,发送数据,而服务端通过监听该端口,接收到来自...
Socket基于TCP/IP协议栈,允许不同网络上的两台计算机进行通信。在服务端,Socket用于监听客户端的连接请求,并处理这些请求。在客户端,Socket则用于建立与服务端的连接并发送数据。 3. **Socket工作流程**: - *...
- 在主循环中不断读取客户端发送的数据,并将其打印出来,然后再向客户端发送消息。 #### 三、程序运行流程 1. **服务端启动**: - 创建`ServerSocket`实例监听指定端口。 - 等待客户端连接。 2. **客户端启动**:...
在VB.NET编程环境中,Socket是实现网络通信的重要工具,它基于TCP/IP协议栈,用于创建客户端和服务器端的连接。本实例将详细讲解如何利用VB.NET实现一个简单的Socket聊天程序,包括服务端和客户端的搭建。 首先,...
Socket是TCP/IP协议族的一部分,用于在两台计算机之间建立可靠的、基于字节流的数据传输连接。在这个实例中,我们将看到如何使用C#的System.Net.Sockets命名空间来创建服务端和客户端程序。 描述中提到,“vs2008...
Socket是TCP/IP通信的基础,它为两台机器间的通信提供了一个端点。ServerSocket用于监听客户端的连接请求,Socket则代表一个实际的连接。在文件传输中,服务器创建ServerSocket,等待客户端的Socket连接,然后通过...
在这个场景中,我们使用Java Socket来构建一个简单的聊天系统,该系统能够实现客户端和服务端之间的实时信息交互。 在Java中,Socket类位于`java.net`包下,是TCP/IP通信的基础。它提供了低级的、面向连接的、基于...
3. **局域网文件传输原理**:局域网(LAN)文件传输通常通过TCP/IP协议实现,利用Socket编程来创建客户端和服务器之间的连接。文件被分割成数据块,通过网络发送,接收端重新组装数据块恢复文件。 4. **C#中的...