java socket的用法

时间:6年前   阅读:4480

Java Socket底层采用TCP/IP协议通信,通信细节被封装,我们仅仅需要指定IP、端口,便能轻易地创建TCP或UDP连接,进行网络通信。数据的读写,可以使用我们熟悉的stream进行操作。

TCP通信中,服务端与客户端是一对多的关系,如下图

Client发起连接请求后,Server端响应并创建一个Socket实例,与Client端一对一通信。通信完毕后,Client端与Server端的Socket实例各自关闭连接并销毁,此次通信结束。

发起连接的三次握手和关闭连接的四次挥手过程暂且不表,后续文章详细介绍。下面看具体代码

服务端代码

package com.coshaho.learn.socket;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

/**

 * SocketServer.java Create on 2017年12月16日 下午11:42:03    

 * 类功能说明:   socket服务端

 * @Author coshaho

 */

public class SocketServer 

{

    public static void main(String[] args) throws Exception 

    {

        // 创建服务端

        ServerSocket server = new ServerSocket(10000);

        

        // 服务端阻塞式监听客户端连接请求

        // 接收到连接请求,则创建一个socket实例,与客户端通信

        Socket client = server.accept();

        

        // 获取InputStream读取数据

        InputStream in = client.getInputStream();

        byte[] b = new byte[1024];

        // 客户端关闭输出流后服务端会读取到-1标志

        while(-1 != in.read(b))

        {

            System.out.println(new String(b));

        }

       

        // 获取OutputStream输出数据

        OutputStream out = client.getOutputStream();

        out.write("hello, client".getBytes());

        // 输出结束,关闭输出流

        client.shutdownOutput();

       

        System.out.println("Server close. " + System.currentTimeMillis());

        server.close();

    }

}

客户端代码

package com.coshaho.learn.socket;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

/**

 * SocketClient.java Create on 2017年12月16日 下午11:42:53    

 * 类功能说明:   socket客户端

 * @Author coshaho

 */

public class SocketClient 

{

    public static void main(String[] args) throws Exception 

    {

        // 请求连接服务端,握手成功,返回Socket实例

        Socket client = new Socket("127.0.0.1",10000);

        

        // 获取输入输出流,读写数据(与服务端数据读写操作相同)

        InputStream in = client.getInputStream();

        OutputStream out = client.getOutputStream();

        

        out.write("hello, server".getBytes());

        client.shutdownOutput();

        

        byte[] b = new byte[1024];

        while(-1 != in.read(b))

        {

            System.out.println(new String(b));

        }

        

        System.out.println("Client close. " + System.currentTimeMillis());

        client.close();

    }

}

本站声明:网站内容来源于网络,如有侵权,请联系我们https://www.qiquanji.com,我们将及时处理。

微信扫码关注

更新实时通知

上一篇:新手进行50etf期权交易需要知道哪些操作?

下一篇:美联储及时出手化解危机 ETF折价立变溢价

网友评论

请先 登录 再评论,若不是会员请先 注册