怎么将该代码改成聊天程序

qq_40801035 2017-12-14 12:41:50
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);
}
}
}
...全文
130 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35048233 2017-12-15
  • 打赏
  • 举报
回复
不应该是用socket吗,然后看你是要udp或者是tcp响应,网上这样代码太多啦
qq_40801035 2017-12-14
  • 打赏
  • 举报
回复
qq_40801035 2017-12-14
  • 打赏
  • 举报
回复
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);
		}
	}
}
qq_40801035 2017-12-14
  • 打赏
  • 举报
回复
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); } } }

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧