博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java编写简单客户/服务器程序
阅读量:4030 次
发布时间:2019-05-24

本文共 3035 字,大约阅读时间需要 10 分钟。

    1.建立EchoServer服务器,监听来自客户的连接

EchoServer.java:

package chapter01;import java.io.*;import java.net.*;public class EchoServer {	private int port = 8000;                 //服务器端口号(IP默认为本地主机IP)	private ServerSocket serverSocket;       //ServerSocket		public EchoServer() throws IOException{		serverSocket = new ServerSocket(port);		System.out.println("服务器启动");	}		public String echo(String msg){		return "echo" + msg;	}	/*	 *分别用PrintWriter和BufferedReader 修饰socket中的输入输出流 	 */		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 service(){		while(true){                                    //循环监听			Socket socket = null;			try{				socket = serverSocket.accept();         //等待一个连接				System.out.println("New connection accepted"+socket.getInetAddress()+":"+socket.getPort());				BufferedReader br = getReader(socket);  //从客户端读信息的流				PrintWriter pw = getWriter(socket);     //向客户端写信息的流								String msg = null;				while((msg=br.readLine())!=null){        					System.out.println(msg);					pw.println(echo(msg));					if(msg.equals("bye")){						break;						}					}				}catch(IOException e){					e.printStackTrace();			}finally{				try{					if(socket!=null){						socket.close();					}				}catch(IOException e){					e.printStackTrace();				}			}		}	}		public static void main(String argsp[]) throws IOException{		new EchoServer().service();	}}

    2.EchoClient向服务器发出连接

EchoClient.java:

package chapter01;import java.net.*;import java.io.*;public class EchoClient {	private String host = "127.0.0.1";       //指定要连接的服务器IP地址	private int port = 8000;                 //指定要连接的服务器端口号	private Socket socket;		public EchoClient() throws IOException{		socket = new Socket(host,port);	}		public static void main(String[] args) throws IOException {		new EchoClient().talk();	}		/*	 *分别用PrintWriter和BufferedReader 修饰socket中的输入输出流 	 */	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;			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();			}		}	}}

测试:

你可能感兴趣的文章
[LeetCode By Python] 2 Add Two Number
查看>>
python 中的 if __name__=='__main__' 作用
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[LeetCode By Python]9. Palindrome Number
查看>>
[leetCode By Python] 14. Longest Common Prefix
查看>>
[LeetCode By Python]107. Binary Tree Level Order Traversal II
查看>>
[LeetCode By Python]108. Convert Sorted Array to Binary Search Tree
查看>>
[leetCode By Python]111. Minimum Depth of Binary Tree
查看>>
[LeetCode By Python]118. Pascal's Triangle
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>
[LeetCode By Python]122. Best Time to Buy and Sell Stock II
查看>>
[LeetCode By Python]125. Valid Palindrome
查看>>
[LeetCode By Python]136. Single Number
查看>>
[LeetCode By Python]172. Factorial Trailing Zeroes
查看>>
[LeetCode By MYSQL] Combine Two Tables
查看>>
python jieba分词模块的基本用法
查看>>
[CCF BY C++]2017.12 最小差值
查看>>
[CCF BY C++]2017-12 游戏
查看>>
如何打开ipynb文件
查看>>