简单Client与Server的单向通信和双向通信_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 简单Client与Server的单向通信和双向通信

简单Client与Server的单向通信和双向通信

 2018/3/22 0:47:15  bijian1013  程序员俱乐部  我要评论(0)
  • 摘要:从Console中读取内容:BufferedReaderinputReader;//Alt+Shift+ztry...catch等快捷键//从Console读取内容try{inputReader=newBufferedReader(newInputStreamReader(System.in));StringinputContent;while(!(inputContent=inputReader.readLine()).equals("bye")){System.out.println
  • 标签:Server client

? ? ? ? 从Console中读取内容:

class="java">BufferedReader inputReader;  
// Alt + Shift + z    try...catch等快捷键  
// 从Console读取内容  
try {  
    inputReader = new BufferedReader(new InputStreamReader(System.in));  
    String inputContent;  
    while (!(inputContent = inputReader.readLine()).equals("bye")) {  
        System.out.println(inputContent);  
    }  
} catch (Exception e) {  
    e.printStackTrace();  
}

一.单向通信

? ? ? ? Client -> Server

SocketClient.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class SocketClient {

    public static void main(String[] args) {
        SocketClient client = new SocketClient();
        client.start();
    }

    public void start() {
        BufferedReader inputReader = null;
        BufferedWriter writer = null;
        Socket socket = null;
        // 从Console读取内容  
        try {
            socket = new Socket("127.0.0.1", 9898);
            // 从socket进行写入  
            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            inputReader = new BufferedReader(new InputStreamReader(System.in));
            String inputContent;
            while (!(inputContent = inputReader.readLine()).equals("bye")) {
                writer.write(inputContent + "\n");
                writer.flush(); 
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                writer.close();
                inputReader.close();
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

SocketServer.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {

    public static void main(String[] args) {
        SocketServer socketServer = new SocketServer();
        socketServer.startServer();
    }

    public void startServer() {
        ServerSocket serverSocket = null;
        BufferedReader reader = null;
        Socket socket = null;
        try {
            // 端口号只要不冲突就行  
            serverSocket = new ServerSocket(9898);
            System.out.println("server started..");
            // 进入阻塞状态,等待客户端接入  
            socket = serverSocket.accept();
            System.out.println("client " + socket.hashCode() + " connected");
            // 从socket中读取数据  
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String receiveMsg;
            while ((receiveMsg = reader.readLine()) != null) { // 以"\n"结束  
                System.out.println(receiveMsg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                socket.close();
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

?

二.Client Server双向通信

? ? ? ? 即时接受消息,也就是所谓的长连接,记得要先启动Server。

SocketClient2.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class SocketClient2 {

    public static void main(String[] args) {
        SocketClient2 client = new SocketClient2();
        client.start();
    }

    public void start() {
        BufferedReader inputReader = null;
        // 从socket读取  
        BufferedReader reader = null;
        BufferedWriter writer = null;
        Socket socket = null;
        // Alt + Shift + z    try...catch等快捷键  
        // 从Console读取内容  
        try {
            socket = new Socket("127.0.0.1", 9898);
            // 用于读取服务器返回的数据  
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            // 从socket进行写入  
            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            inputReader = new BufferedReader(new InputStreamReader(System.in));
            String inputContent;
            while (!(inputContent = inputReader.readLine()).equals("bye")) {
                writer.write(inputContent + "\n");
                writer.flush();
                //              System.out.println(inputContent);  
                // 服务器返回的数据  
                String response = reader.readLine();
                System.out.println(response);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                writer.close();
                inputReader.close();
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

SocketServer2.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer2 {

    public static void main(String[] args) {
        SocketServer2 socketServer = new SocketServer2();
        socketServer.startServer();
    }

    public void startServer() {
        ServerSocket serverSocket = null;
        BufferedReader reader = null;
        BufferedWriter writer = null;
        Socket socket = null;
        try {
            // 端口号只要不冲突就行  
            serverSocket = new ServerSocket(9898);
            System.out.println("server started..");
            // 进入阻塞状态,等待客户端接入  
            socket = serverSocket.accept();
            System.out.println("client " + socket.hashCode() + " connected");
            // 从socket中读取数据  
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            String receiveMsg;
            while ((receiveMsg = reader.readLine()) != null) { // 以"\n"结束  
                System.out.println(receiveMsg);
                writer.write("server reply:" + receiveMsg + "\n");
                writer.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                writer.close();
                socket.close();
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

?

三.Socket模拟http请求响应(仅模拟)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.Random;

public class SimpleServer {
    private ServerSocket ss;
    private Socket socket;
    private BufferedReader in;
    private PrintWriter out;
    private Random random = new Random();

    public SimpleServer() {
        try {
            this.ss = new ServerSocket(9898);

            System.out.println("The server is waiting your input...");
            for (;;) {
                this.socket = this.ss.accept();

                this.in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
                this.out = new PrintWriter(this.socket.getOutputStream(), true);
                String line = this.in.readLine();

                System.out.println("you input is : " + line);

                String echo = randomEcho();
                System.out.println("echo : " + echo);
                StringBuilder sb = new StringBuilder();
                sb.append("HTTP/1.1 200 OK").append("\n")
                        .append("Content-Type:application/x-www-form-urlencoded;charset=UTF-8").append("\n")
                        .append("Date:").append(new Date().toString()).append("\n").append("Content-Length:")
                        .append(echo.getBytes().length).append("\n").append("\n").append(echo);

                this.out.println(sb.toString());
                this.out.flush();

                this.out.close();
                this.in.close();
                this.socket.close();
                if (line.equalsIgnoreCase("quit") || line.equalsIgnoreCase("exit") || line.equalsIgnoreCase("bye")) {
                    break;
                }
            }
            this.ss.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private String randomEcho() throws Exception {
        int num = this.random.nextInt();
        StringBuilder sb = new StringBuilder();
        sb.append("respCode=").append("0000").append("&").append("respMsg=").append("随机消息:" + num);
        //    String signature = SignUtil.sign(ResourcesUtils.getInstance().tppPriKey().trim().getBytes("UTF-8"), sb.toString());
        //    sb.append("&").append("signature=").append(signature);
        return sb.toString();
    }

    public static void main(String[] args) {
        new SimpleServer();
    }
}

?

参考文章:http://blog.csdn.net/DuanLiuchang/article/details/70148894?locationNum=13&fps=1

上一篇: 一开始就要设定未来要往管理阶层走 下一篇: 没有下一篇了!
发表评论
用户名: 匿名