• Java Socket入门


    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();
        }
    }
  • 相关阅读:
    字符串转XML保存后保证XML的格式
    SmartFoxServer学习(3)--第一个Extension
    SmartFoxServer学习(2)--Extension调试
    SmartFoxServer学习(1)--初步了解
    jmeter 开发自己的java请求 二次开发
    hive 面试题
    美丽说-爬虫记录
    python中re.sub的使用 --解读一段代码
    python 抓取美丽说店铺的宝贝图片及详细信息的实现(爬虫)
    hadoop编码问题,mapreduce中Tex与string的转化 乱码问题
  • 原文地址:https://www.cnblogs.com/coshaho/p/8048204.html
Copyright © 2020-2023  润新知