自己用java实现飞鸽传书 1 - 实现socket通信

第一步:

建立服务端客户端,实现端到端通信。因为要传递文件,信号量较大,故使用TCP/IP协议。

服务端和客户端都要建立socket,而后通过socket进行通信。目前只实现服务端到客户端的单向通信。

服务端代码如下:

import java.io.PrintStream;

import java.net.ServerSocket;

import java.net.Socket;



public class Server {

    

    public static void main(String[] args){

        //创建服务端socket,用以网络信息的接收

        ServerSocket serverSocket = null;

        try {

            //服务端socket使用本地IP,端口号使用36000

            serverSocket = new ServerSocket(36000);

            //保证服务端持续运行

            while(true){

                //接收网络信息,未接收到则阻塞当前线程

                Socket socket = serverSocket.accept();

                //获取服务端输出流

                PrintStream ps = new PrintStream(socket.getOutputStream());

                //向输出流中追加信息

                ps.append("你好,这里是服务端!");

                //关闭输出流和socket

                ps.close();

                socket.close();

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

客户端代码如下:

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.Socket;



public class Client {



    public static void main(String[] args){

        BufferedReader reader = null;

        Socket socket = null;

        try {

            //创建客户端socket,用以连接服务端

            socket = new Socket("127.0.0.1", 36000);

            //读取服务端传来的字节流

            reader = new BufferedReader(

                        new InputStreamReader(socket.getInputStream()) );

            //读取字节流中的信息,并以字符串输出

            StringBuilder builder = new StringBuilder();

            String line;

            while((line=reader.readLine()) != null){

                builder.append(line).append("\n");

            }

            System.out.println(builder.toString());

            //关闭reader和socket

            reader.close();

            socket.close();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

先运行服务端,再运行客户端,会看到控制台输出预期中的信息:

image

你可能感兴趣的:(socket通信)