java Socket 简单服务端与客户端代码

前言

本文实现的是服务器与客户端建立连接,客户端可以向服务器发送消息,服务器可以向客户端推送消息。
Java Socket

一:编写服务端
package kf;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 服务端
 * @author 刘正
 *
 */
public class servernettext {
    public static String _pattern = "yyyy-MM-dd HH:mm:ss SSS";
    public static SimpleDateFormat format = new SimpleDateFormat(_pattern);
    // 设置超时间
    public static int _sec = 0;
    public static void main(String[] args) {
        try {
            //监听指定的端口
            ServerSocket server=new ServerSocket(9999);
            while (true) {
                //建立连接
                Socket soket=server.accept();   
                System.out.println(format.format(new Date()));
                System.out.println("建立了链接\n");
                //接收客户端消息(从socket中获取输入流,并建立缓冲区进行读取)
                InputStream din=soket.getInputStream();
                System.out.println("客户端ip地址是:"+soket.getInetAddress());
                System.out.println("客户端端口号是:"+soket.getPort());
                System.out.println("本地端口号是:"+soket.getLocalPort());
                byte[] outPut=new byte[4096];
                while (din.read(outPut)>0) {
                    //注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8
                    String result=new String(outPut);
                    System.out.println("客户端的消息是:"+result);
                }

                //给客户端发送消息
                OutputStream dout=soket.getOutputStream();
                dout.write("已收到你发来的消息!!".getBytes());

                din.close();
                dout.close();
                soket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
二:编写客户端
package kf;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;

/**
 * 客户端
 * 
 * @author 刘正
 *
 */
public class clienttextnet {
    public static String _pattern = "yyyy-MM-dd HH:mm:ss SSS";
    public static SimpleDateFormat format = new SimpleDateFormat(_pattern);

    public static void main(String[] args) {
        try {
            while (true) {
                // 与服务端建立连接
                Socket socket = new Socket("127.0.0.1", 9999);
                // 获得输出流,给服务端发送信息
                OutputStream dout = socket.getOutputStream();
                String str = "数据传输------";
                dout.write(str.getBytes());
                // 通过shutdownOutput高速服务器已经发送完数据,后续只能接受数据
                socket.shutdownOutput();

                // 接收服务端发送的消息
                InputStream din = socket.getInputStream();
                byte[] outPut = new byte[4096];
                while (din.read(outPut) > 0) {
                    String result = new String(outPut);
                    System.out.println("服务端反回的的消息是:" + result);
                }
                din.close();
                dout.close();
                socket.close();
                Thread.sleep(3000);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

不懂得地方欢迎私信我,我会在第一时间给予回复,如阅读中发现写错的地方,欢迎纠正。

你可能感兴趣的:(Java)