四 .用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();
}
}
}
}
分享到:
相关推荐
实现了java socket编程基于tcp/ip协议的简单服务端,客户端通信,用于发送报文,接收解析报文。
android studio Socket客户端服务器通信 TCP/IP通信android studio Socket客户端服务器通信 TCP/IP通信android studio Socket客户端服务器通信 TCP/IP通信
其中网络通信部分采用流行的TCP/IP协议。程序采用典型的C/S(服务器/客户端)构架。用socket编程设计网络通讯。界面设计部分采用Windows MFC框架。数据库采用微软SQL Server。本文最终设计了一个简易版本的聊天软件,...
基于TCP/IP的Socket多线程通信(服务器和客户端),需要的请下载看看。
第2章:介绍TCP/IP协议层次结构中网络接口层包含的内容,主要有物理层和数据链路的相关知识。 第3章:介绍TCP/IP协议层次结构中网络层及其相关知识。主要内容有IP数据报格式、IP层的功能、IP地址、ICMP协议、地址...
实现了服务器与客户端功能的合二为一,客户端启动后,连接三次服务器,如果失败,则自己自动变为服务器。
计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议。TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登陆BBS,用的就是TCP协议;UDP是无连接的,通信双方都...
C#网络通信之TCP连接,客户端和服务端的tcp收发信息,分享给大家。
基于socket应用的TCP/Ip通讯。包含一个服务端,一个客户端。实现客户端与服务端通讯。
一个自己的小程序,适合初学者学习TCP/IP与Socket套接字的使用
简单tcp socket 客户端 服务端代码实现 附C++代码源码
sockettool 测试工具 tcp/ip/udp 可以创建服务端 客户端,测试两端之间的连接。 sockettool 测试工具 tcp/ip/udp 可以创建服务端 客户端,测试两端之间的连接。
用C#写的简单的TCP/IP通信小示例,开发环境为VS2013,里面有一个服务端和一个客户端,适合新手看看
网络通信工具,服务端和客户端连接测试工具,可单条发送,循环发送,模拟多客户端发送,本工具可以作为网络通信工具或压力测试工具, Java NIO Socket编程,需JAVA运行环境
Android tcp/ip客户端程序,实现Android客户端与Ubuntu ros 服务器通信,连接成功之后客户端发送数据,服务器收到数据之后返回。 参考:https://blog.csdn.net/weixin_42100710/article/details/126390181
利用socket通过tcp/ip协议,实现客户端和服务端的相互通信,实例不复杂,适合刚刚接触网络编程的人参考一下
客户端发送16进制给服务端,并行实现socket通道活动状态和断开重新连接的功能, 监听接口是否存在数据,如果存在socket客户端发送给socket服务端的实现 随着物联网的发展,随之出现了各种传感器监测数据的实时发送,...
利用Socket (套接字)开发的客户端,可以与服务器通讯传输文件和字符。
TCP/IP协议socket编程。学习资料、、分客户端和服务器端
基于winsock文件传输的C++文件传输实现,TCP/IP协议,服务端和客户端都有,简单易学