首页 > 代码库 > java套接字(socket)实例

java套接字(socket)实例

客户端socket

流程:

1、连接远程主机

2、发送数据

3、接收数据

4、关闭流与socket连接

实例:

import java.io.*;import java.net.Socket;import java.util.Date;/** * Created by CLY on 2017/7/11. */public class ClientSocket {    public static void main(String[] arg){        int port = 233;//与之连接的服务端套接字的端口号        String host = "127.0.0.1";//与之连接的服务端套接字ip地址        Socket socket = null;        try {            //创建socket连接,即在该Socket构造函数返回之前,就会与远程主机建立连接,如果未能连接,则会抛出异常。            socket = new Socket(host, port);            //获取输出流,向服务器端发送当前时间            OutputStream outputStream = socket.getOutputStream();            Writer writer = new OutputStreamWriter(outputStream);            String now_date = new Date().toString();            writer.write("客户端当前时间为——"+now_date);            writer.flush();            ////关闭客户端的输出流。相当于给流中加入一个结束标记-1.这个样子服务器的输入流的reaLine方法就会读到一个-1,然后结束readLIne方法。            socket.shutdownOutput();            //获取输入流,并读取服务器端的响应信息            InputStream inputStream= socket.getInputStream();            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));            String server_info = null;            while((server_info=br.readLine())!=null){                System.out.println("服务端传过来的值:"+server_info);            }        } catch (IOException e) {            e.printStackTrace();        } finally {            //如果socket不为null,则释放掉它            if (socket!=null){                try {                    socket.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}

 

服务端Socket

流程:

1、绑定端口

2、监听入站数据

3、在绑定的端口上接受来自远程机器的连接

4、接收数据

5、发送数据

6、关闭流与socket连接

实例:

import java.io.*;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;import java.util.Date;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by CLY on 2017/7/11. */public class MyServerSocket {    public static void main(String[] arg){        /**         * 根据tcp协议可知,所谓套接字(socket)是指一个由“ip地址+端口”组成的组合。         * 而每一台主机的ip地址都是确定的,不需要我们来指定,         * 所以构建服务器socket的第一步就是确定端口         */        try {            int port = 233;//端口号            int queueLength = 50;//最大入站连接            InetAddress bindAddress = InetAddress.getByName("127.0.0.1");//只监听该ip的指定端口            ExecutorService pool = Executors.newFixedThreadPool(50);//创建一个最大容量为50的线程池,为每一个入站连接分配一条线程。            //创建一个端口为“233”的服务器socket            ServerSocket serverSocket = new ServerSocket(port);            //创建一个端口为233的服务器socket,且队列一次最多能保存50个入站连接            //ServerSocket serverSocket = new ServerSocket(port,queueLength);            //假设一台主机有多个ip地址,则服务器socket会默认在所有ip地址的指定端口上监听,但可以指定其只监听指定ip的端口。            //ServerSocket serverSocket = new ServerSocket(port,queueLength,bindAddress);            while (true){                //accept()调用会阻塞,会一直等到有客户端连接到指定socket端口为止。                final Socket connection = serverSocket.accept();                //线程池中拿取一条线程来处理socket连接。然后主程序运行下一个循环,继续等待下一个客户端的访问。                pool.execute(new Runnable() {                    public void run() {                        try {                            //从输入流中读取获取客户端传过来的值                            InputStream inputStream= connection.getInputStream();                            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));                            String client_info = null;                            while((client_info=br.readLine())!=null){                                System.out.println("客户端传过来的值:"+client_info);                            }                            //测试:将当前时间写入流中返回给客户端                            Writer writer = new OutputStreamWriter(connection.getOutputStream());                            String nowData = new Date().toString();                            writer.write("服务端当前时间为——"+nowData);                            writer.flush();                        } catch (IOException e) {                            e.printStackTrace();                        } finally {                            try {                                //关闭socket连接                                connection.close();                            } catch (IOException e) {                                e.printStackTrace();                            }                        }                    }                });            }        } catch (IOException e) {            e.printStackTrace();        }    }}

 

java套接字(socket)实例