JAVA 实现 EchoServer EchoClient 服务器、客户机本地通信程序

新手入门,照着课本敲的,自己加的注释,若有错误,敬请指出。

接着会自己试着写多线程的、异地交流的一些东东。


前两个代码是客户机发话,服务器傻逼式回应;后面两个代码是客户机和服务器都是人工的,当线程的,轮流输入通信。


运行情况:

SERVER:

服务器启动
New connection accepted/127.0.0.1:2924
1
2
3
4
5
dxgjdfjg
bye]
bye


CLIENT:

How are you ! I am amy . you can talk with me .
1
Amy:YES!
2
Amy:I love you!
3
Amy:I love xiaopan!
4
Amy:Sorry I can't understand you!
5
Amy:Sorry I can't understand you!
dxgjdfjg
Amy:Sorry I can't understand you!
bye]
Amy:Sorry I can't understand you!
bye
Amy:See You!




【SERVER】

package socketserver;  /**  * EchoServer Server program  * can do easy talk with Client  * @author Amy  * make in 2014/2   * @Version 1.0  */  import java.io.*; import java.net.*;  public class EchoServer {  //服务端程序 	private int port = 8000;  //链接端口 	private ServerSocket serverSocket;  	public EchoServer() throws IOException {	//开启服务端程序 		serverSocket = new ServerSocket(port);	//指定通信端口并开启服务 		System.out.println("服务器启动"); 	}  	public String echo(String msg) {	//给恢复信息加前缀 		return "Amy:" + msg; 	}  	private PrintWriter getWriter(Socket socket) throws IOException {	//给客户机回复交流语句 		OutputStream socketOut = socket.getOutputStream(); 		return new PrintWriter(socketOut, true); 	}  	private BufferedReader getReader(Socket socket) throws IOException {	//用于读取客户机交流语句 		InputStream scoketIn = socket.getInputStream(); 		return new BufferedReader(new InputStreamReader(scoketIn)); 	}  	public void server() {		//服务程序 		Socket socket = null;	//清空客户机连接 		try { 			socket = serverSocket.accept();// 等待客户机连接 			System.out.println("New connection accepted" 					+ socket.getInetAddress() + ":" + socket.getPort());	//客户机连接成功,给出新连接客户机IP地址及连接端口号 			BufferedReader br = getReader(socket);	//读取客户机交流语句 			PrintWriter pw = getWriter(socket); 			pw.println("How are you ! I am amy . you can talk with me .");	//交流问候语 			String msg = null;	//清空对话缓存内容 			while ((msg = br.readLine()) != null) {	//读取客户机交流语句 若不为空 				System.out.println(msg);	//输出到服务端控制台 				 				if (msg.equals("bye"))// 如果客户发送信息为“bye”,结束通信 				{ 					pw.println(echo("See You!"));	//给客户机恢复对应语句//要结束服务了:下次再见 					break;	//结束服务 断开连接 				} 				else if(msg.equals("1"))	//与客户机交流 				{ 					pw.println(echo("YES!")); 				} 				else if(msg.equals("2")) 				{ 					pw.println(echo("I love you!")); 				} 				else if(msg.equals("3")) 				{ 					pw.println(echo("I love xiaopan!")); 				} 				else 				{ 					pw.println(echo("Sorry I can't understand you!")); 				} 			} 		} catch (IOException e) {	//异常 			e.printStackTrace(); 		} finally { 			try { 				if (socket != null)	//客户机关闭客户端 					socket.close();// 断开连接 			} catch (IOException e) { 				e.printStackTrace(); 			} 		} 	}  	public static void main(String[] args) throws IOException {	//main 		new EchoServer().server(); 	} }
【CLIENT】

/**  * EchoClient Client program  * can talk with Server  * @author Amy  * make in 2014/2   * @Version 1.0  */  import java.io.*; import java.net.*; import java.util.*;  public class EchoClient {	//客户端 	private String host = "localhost";	//与本地服务端器通信 	private int port = 8000;	//指定通信端口 	private Socket socket;  	public EchoClient() throws IOException {	//与服务端建立连接,收到“问候语”表示连接成功 		socket = new Socket(host, port);	//与指定的服务器的指定端口连接 	}  	private PrintWriter getWriter(Socket socket) throws IOException {	//给服务端发送回话语句 		OutputStream socketOut = socket.getOutputStream(); 		return new PrintWriter(socketOut, true); 	}  	private BufferedReader getReader(Socket socket) throws IOException {	//接收服务端的会话语句 		InputStream socketIn = socket.getInputStream(); 		return new BufferedReader(new InputStreamReader(socketIn)); 	}  	public void talk()throws IOException{ //与服务端回话程序 		try{ 			BufferedReader br=getReader(socket);	//接收服务端的会话语句 			PrintWriter pw=getWriter(socket);		//给服务端发送回话语句 			BufferedReader localReader=new BufferedReader(new InputStreamReader(System.in));//本地控制台输入 			String msg=null;	//清空语句缓存 			System.out.println(br.readLine());		//输出服务端会话语句到服务台,连接成功的“问候语句” 			while((msg=localReader.readLine())!=null){	//读取到本地客户端控制台语句,不为空 				pw.println(msg);	//给服务端发送本地客户端控制台输入的会话语句 				System.out.println(br.readLine());	//将接收到的服务端发来的会话语句输出到本地客户端控制台 				if(msg.equals("bye"))break; 			} 		} 		catch(IOException e){ 			e.printStackTrace(); 		} 		finally 		{ 			try{ 				socket.close();	//断开连接 			} 			catch(IOException e){ 				e.printStackTrace(); 			} 		} 	} 	public static void main(String[] args) throws IOException{	//main 		new EchoClient().talk(); 	} }


自主对话:

【Server】

/**  * EchoServer Server program  * user can talk with Client  * @author Amy  * make in 2014/2   * @Version 1.1  */  import java.io.*; import java.net.*;  public class EchoServer {  //服务端程序 	private int port = 8000;  //链接端口 	private ServerSocket serverSocket;  	public EchoServer() throws IOException {	//开启服务端程序 		serverSocket = new ServerSocket(port);	//指定通信端口并开启服务 		System.out.println("服务器启动"); 	}  	public String echo(String msg) {	//给恢复信息加前缀 		return "Amy:" + msg; 	}  	private PrintWriter getWriter(Socket socket) throws IOException {	//给客户机回复交流语句 		OutputStream socketOut = socket.getOutputStream(); 		return new PrintWriter(socketOut, true); 	}  	private BufferedReader getReader(Socket socket) throws IOException {	//用于读取客户机交流语句 		InputStream scoketIn = socket.getInputStream(); 		return new BufferedReader(new InputStreamReader(scoketIn)); 	}  	public void server() {		//服务程序 		Socket socket = null;	//清空客户机连接 		try { 			socket = serverSocket.accept();// 等待客户机连接 			System.out.println("New connection accepted" 					+ socket.getInetAddress() + ":" + socket.getPort());	//客户机连接成功,给出新连接客户机IP地址及连接端口号 			BufferedReader br = getReader(socket);	//读取客户机交流语句 			PrintWriter pw = getWriter(socket);	//将会话内容发送给客户端 			BufferedReader localReader=new BufferedReader(new InputStreamReader(System.in));//本地控制台输入 			 			pw.println("How are you ! I am amy . you can talk with me .");	//交流问候语 			String msg = null;	//清空对话缓存内容 			while ((msg = br.readLine()) != null) {	//读取客户机交流语句 若不为空 				System.out.println(msg);	//输出到服务端控制台 				 				if (msg.equals("bye"))// 如果客户发送信息为“bye”,结束通信 				{ 					pw.println(echo("See You!"));	//给客户机恢复对应语句//要结束服务了:下次再见 					break;	//结束服务 断开连接 				} 				else 				{ 					msg=localReader.readLine();//读取本地服务端控制台内容 					pw.println(echo(msg)); 				} 				/*else if(msg.equals("1"))	//与客户机交流 				{ 					pw.println(echo("YES!")); 				} 				else if(msg.equals("2")) 				{ 					pw.println(echo("I love you!")); 				} 				else if(msg.equals("3")) 				{ 					pw.println(echo("I love xiaopan!")); 				} 				else 				{ 					pw.println(echo("Sorry I can't understand you!")); 				}*/ 			} 		} catch (IOException e) {	//异常 			e.printStackTrace(); 		} finally { 			try { 				if (socket != null)	//客户机关闭客户端 					socket.close();// 断开连接 			} catch (IOException e) { 				e.printStackTrace(); 			} 		} 	}  	public static void main(String[] args) throws IOException {	//main 		new EchoServer().server(); 	} }



【CLIENT】


/**  * EchoClient Client program  * user can talk with Server  * @author Amy  * make in 2014/2   * @Version 1.1  */  import java.io.*; import java.net.*; import java.util.*;  public class EchoClient {	//客户端 	private String host = "localhost";	//与本地服务端器通信 	private int port = 8000;	//指定通信端口 	private Socket socket;  	public EchoClient() throws IOException {	//与服务端建立连接,收到“问候语”表示连接成功 		socket = new Socket(host, port);	//与指定的服务器的指定端口连接 	}  	private PrintWriter getWriter(Socket socket) throws IOException {	//给服务端发送回话语句 		OutputStream socketOut = socket.getOutputStream(); 		return new PrintWriter(socketOut, true); 	}  	private BufferedReader getReader(Socket socket) throws IOException {	//接收服务端的会话语句 		InputStream socketIn = socket.getInputStream(); 		return new BufferedReader(new InputStreamReader(socketIn)); 	}  	public void talk()throws IOException{ //与服务端回话程序 		try{ 			BufferedReader br=getReader(socket);	//接收服务端的会话语句 			PrintWriter pw=getWriter(socket);		//给服务端发送回话语句 			BufferedReader localReader=new BufferedReader(new InputStreamReader(System.in));//本地控制台输入 			String msg=null;	//清空语句缓存 			System.out.println(br.readLine());		//输出服务端会话语句到服务台,连接成功的“问候语句” 			while((msg=localReader.readLine())!=null){	//读取到本地客户端控制台语句,不为空 				pw.println(msg);	//给服务端发送本地客户端控制台输入的会话语句 				System.out.println(br.readLine());	//将接收到的服务端发来的会话语句输出到本地客户端控制台 				if(msg.equals("bye"))break; 			} 		} 		catch(IOException e){ 			e.printStackTrace(); 		} 		finally 		{ 			try{ 				socket.close();	//断开连接 			} 			catch(IOException e){ 				e.printStackTrace(); 			} 		} 	} 	public static void main(String[] args) throws IOException{	//main 		new EchoClient().talk(); 	} }






你可能感兴趣的:(java,socket,server,服务器,控制台)