java网络编程学习之用java编写客户/服务器程序

来源:互联网 发布:node服务器 编辑:程序博客网 时间:2024/06/06 03:19

使用java 套接字socket编写简单的客户/服务器程序,程序实现了:在客户端输入信息,传到服务器端,再从服务器端传回信息,显示在客户端

小知识点:

如何用Eclipse运行两个进程? 答:run as之后 display selected console进行选择进程查看



 看看效果(先启动服务器,再启动客户端程序)


上代码

package network;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.nio.Buffer;/** * 服务器程序 * @author zx * */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 "echo "+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 socketIn = socket.getInputStream();return new BufferedReader(new InputStreamReader(socketIn));}public void serivce() {while(true){Socket socket = null;try {socket = serverSocket.accept();//等待客户连接System.out.println("New connection accepted"+socket.getInetAddress()+":"+socket.getPort());//获取到连接,输出信息BufferedReader br = getReader(socket);//取得从客户端获取socket的输出信息socket.getInputStream()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 (Exception e) {e.printStackTrace();}finally{if(socket!=null){try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}public static void main(String[] args) throws IOException {new EchoServer().serivce();}}

package network;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;/** * 客户端程序 * @author  * */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(){try {System.out.println("客户端启动!");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) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static void main(String[] args) throws IOException {new EchoClient().talk();}}
总结:一个简单的服务器/客户端程序 为接下来的学习打下基础!

0 0