java-socket通信(一)

百度百科:

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

Client

public class JavaClient {

    public static void main(String [] args) throws InterruptedException, IOException
    {
        //创建socket
        InetSocketAddress addr = new InetSocketAddress("127.0.0.1", 8888);
        Socket sock = new Socket();
        //连接服务器
        sock.connect(addr);

        //获得输入输出流
        BufferedReader is = new BufferedReader(new InputStreamReader(sock.getInputStream()));
        PrintWriter os = new PrintWriter(sock.getOutputStream());

        //发送数据
        os.write("{\"type\": 0, \"taskid\":\"001\"}");
        os.flush();
        //关闭输出流
        sock.shutdownOutput();

        //获取接收到的数据
        String s = is.readLine();
        System.out.println("接收:" + s);

        //关闭流
        os.close();
        is.close();
        sock.close();
    }
}

Server

public class JavaServer {

    /**
     * Socket服务端
     */
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket=new ServerSocket(8888);
            System.out.println("服务端已启动,等待客户端连接..");
            //侦听并接受到此套接字的连接,返回一个Socket对象
            Socket socket=serverSocket.accept();

            //获得输入输出流
            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter os = new PrintWriter(socket.getOutputStream());

            System.out.println("接收:" + is.readLine());

            //发送:{"status":1, "msg":"success", "data":"hhhhhh"}
            os.write("{\"status\":1, \"msg\":\"success\", \"data\":\"hhhhhh\"}");
            os.flush();
            socket.shutdownOutput();//关闭输出流

            //关闭相对应的资源
            os.close();
            is.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

 

你可能感兴趣的:(java基础)