50,523
社区成员
发帖
与我相关
我的任务
分享
package ex11_6;
import java.net.*;
import java.io.*;
public class ServerDemo {
public static void main(String[] args) throws IOException {
// 声明写到客户端的字符串变量
String toClient;
// 声明客户端的文件写出类
PrintWriter clientPrintWriter = null;
// 声明客户端的文件读入类
BufferedReader clientBufferedReader = null;
// 与客户端通话的状态
boolean runable = true;
// 创建SeverSocket的服务接口
ServerSocket serverSocket = null;
try {
// 使该接口应用端口1234
serverSocket = new ServerSocket(1234);
} catch (IOException e) {
System.err.println("不能创建1234端口");
e.printStackTrace();
System.exit(0);
}
// 创建Socket的客户接口,当有客户端的程序访问该服务接口时激活该类
Socket clientSocket = null;
try {
// 通过accept()方法使服务器与客户端的Socket接口建立联系
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("访问端口失败");
e.printStackTrace();
System.exit(1);
}
// 取得客户端的Socket接口的写出类
clientPrintWriter = new PrintWriter(clientSocket.getOutputStream(),
true);
// 取得客户端的Socket接口的读入类
clientBufferedReader = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
// 通过键盘输入器建立另一个文件读入器
BufferedReader keyBufferedReader = new BufferedReader(
new InputStreamReader(System.in));
// 当有客户端的程序进入时显示欢迎信息
toClient = "您好,欢迎您!";
clientPrintWriter.println(toClient);
// 建立显示客户端信息的线程
ReadClientThread readClientThread = new ReadClientThread(
clientBufferedReader);
// 启动线程
readClientThread.start();
// 进入与客户端对话程序
while (runable) {
// 向客户端写出服务端的键入信息
toClient = keyBufferedReader.readLine();
clientPrintWriter.println(toClient);
// 如果服务端写入"Bye.",退出对话程序
if (toClient.equals("Bye."))
break;
// 获取线程的运行状态
runable = readClientThread.runable;
}
readClientThread.fromClient = "欢迎下次再来.";
// 关闭线程
readClientThread.runable = false;
// 关闭客户端的文件写出器
clientPrintWriter.close();
// 关闭客户端的文件读入器
clientBufferedReader.close();
// 关闭键盘的文件读入器
keyBufferedReader.close();
// 关闭客户端接口
clientSocket.close();
// 关闭服务端接口
serverSocket.close();
}
}
// 读取客户端信息的线程类
class ReadClientThread extends Thread {
BufferedReader bufferedReader = null;
String fromClient = "";
boolean runable = true;
public ReadClientThread(BufferedReader in) {
this.bufferedReader = in;
}
public void run() {
while (runable) {
// 显示客户端的信息
try {
fromClient = bufferedReader.readLine();
} catch (Exception e) {
runable = false;
}
// 当客户端输入Bye.时,服务端结束显示客户端信息与向客户端写入信息的两个循环
if (fromClient.equals("Bye.")) {
System.out.print("客户端程序退出");
// 结束向客户写入信息循环
runable = false;
// 结束显示客户端信息循环
break;
}
System.out.println("客户端:" + fromClient);
}
}
}
package ex11_7;
import java.io.*;
import java.net.*;
public class ClientDemo {
public static void main(String[] args) throws IOException {
// 声明服务器的Socket类
Socket serverSocket = null;
// 声明服务端文件写出类
PrintWriter printWriter = null;
// 声明服务端文件读入类
BufferedReader serverBufferedReader = null;
// 创建与服务器通话的状态变量
boolean runable = true;
// 声明写到服务端的信息变量
String toServer;
try {
// 通过1234端口使客户端接口与服务器接口联系
serverSocket = new Socket("localhost", 1234);
// 创建服务端接口的写出类
printWriter = new PrintWriter(serverSocket.getOutputStream(), true);
// 创建服务端接口的读入类
serverBufferedReader = new BufferedReader(new InputStreamReader(
serverSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("找不到服务器");
e.printStackTrace();
System.exit(0);
} catch (IOException e) {
System.err.println("不能获得Socket的读入与写出器");
e.printStackTrace();
System.exit(0);
}
// 创建键盘文件读入类
BufferedReader keyBufferedReader = new BufferedReader(
new InputStreamReader(System.in));
// 向服务器输入信息
printWriter.println("新的用户登陆");
// 建立显示服务端信息的线程
ReadServerThread readServerThread = new ReadServerThread(
serverBufferedReader);
// 启动线程
readServerThread.start();
// 进入与服务器对话的循环
while (runable) {
toServer = keyBufferedReader.readLine();
// 向服务器输出信息
printWriter.println(toServer);
// 当输入的信息是"Bye."时,退出程序
if (toServer.equals("Bye."))
break;
// 获取线程的运行状态
runable = readServerThread.runable;
}
readServerThread.fromServer = "欢迎下次再来.";
// 关闭线程
readServerThread.runable = false;
// 关闭服务端的文件写出类
printWriter.close();
// 关闭服务端的文件读入类
serverBufferedReader.close();
// 关闭键盘文件读入类
keyBufferedReader.close();
// 关闭Socket类
serverSocket.close();
}
}
// 读取服务端信息的线程
class ReadServerThread extends Thread {
BufferedReader in = null;
String fromServer = "";
boolean runable = true;
public ReadServerThread(BufferedReader in) {
this.in = in;
}
public void run() {
while (runable) {
// 显示来自服务器的信息
try {
fromServer = in.readLine();
} catch (Exception e) {
runable = false;
}
// 当服务端输入Bye.时,结束对话程序
if (fromServer.equals("Bye.")) {
System.out.print("服务器程序退出");
// 结束向服务端写入信息循环
runable = false;
// 结束显示服务端信息循环
break;
}
System.out.println("服务器: " + fromServer);
}
}
}
package ex11_7;
import java.io.*;
import java.net.*;
public class ClientDemo {
public static void main(String[] args) throws IOException {
// 声明服务器的Socket类
Socket serverSocket = null;
// 声明服务端文件写出类
PrintWriter printWriter = null;
// 声明服务端文件读入类
BufferedReader serverBufferedReader = null;
// 创建与服务器通话的状态变量
boolean runable = true;
// 声明写到服务端的信息变量
String toServer;
try {
// 通过1234端口使客户端接口与服务器接口联系
serverSocket = new Socket("localhost", 1234);
// 创建服务端接口的写出类
printWriter = new PrintWriter(serverSocket.getOutputStream(), true);
// 创建服务端接口的读入类
serverBufferedReader = new BufferedReader(new InputStreamReader(
serverSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("找不到服务器");
e.printStackTrace();
System.exit(0);
} catch (IOException e) {
System.err.println("不能获得Socket的读入与写出器");
e.printStackTrace();
System.exit(0);
}
// 创建键盘文件读入类
BufferedReader keyBufferedReader = new BufferedReader(
new InputStreamReader(System.in));
// 向服务器输入信息
printWriter.println("新的用户登陆");
// 建立显示服务端信息的线程
ReadServerThread readServerThread = new ReadServerThread(
serverBufferedReader);
// 启动线程
readServerThread.start();
// 进入与服务器对话的循环
while (runable) {
toServer = keyBufferedReader.readLine();
// 向服务器输出信息
printWriter.println(toServer);
// 当输入的信息是"Bye."时,退出程序
if (toServer.equals("Bye."))
break;
// 获取线程的运行状态
runable = readServerThread.runable;
}
readServerThread.fromServer = "欢迎下次再来.";
// 关闭线程
readServerThread.runable = false;
// 关闭服务端的文件写出类
printWriter.close();
// 关闭服务端的文件读入类
serverBufferedReader.close();
// 关闭键盘文件读入类
keyBufferedReader.close();
// 关闭Socket类
serverSocket.close();
}
}
// 读取服务端信息的线程
class ReadServerThread extends Thread {
BufferedReader in = null;
String fromServer = "";
boolean runable = true;
public ReadServerThread(BufferedReader in) {
this.in = in;
}
public void run() {
while (runable) {
// 显示来自服务器的信息
try {
fromServer = in.readLine();
} catch (Exception e) {
runable = false;
}
// 当服务端输入Bye.时,结束对话程序
if (fromServer.equals("Bye.")) {
System.out.print("服务器程序退出");
// 结束向服务端写入信息循环
runable = false;
// 结束显示服务端信息循环
break;
}
System.out.println("服务器: " + fromServer);
}
}
}