Socket分为ServerSocket和Socket两大类;

其中ServerSocket用于服务器端,可以通过accept方法监听请求,监听到请求后返回Socket

Socket用户具体完成数据传输,客户端直接使用Socket发生请求并传输数据。

DEMO:

单方面发送消息:

服务端:

package com.seesun2012.socket;

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Socket服务端
 *
 * @author seesun2012@163.com
 *
 */
public class TcpServer {

    public static void main(String[] args) {
        doServer();
    }

    private static void doServer() {
        try {
            //建立服务端的Socket服务
            ServerSocket ss = new ServerSocket(15421);
            //获取客户端对象
            Socket s = ss.accept();
            //获取客户端IP地址
            String ip = s.getInetAddress().getHostAddress();
            //获取客户端端口号
            int port = s.getPort();
            System.out.println(ip + ":" + port + " 已建立连接");
            //用输入流接收客户端输出流
            InputStream ins = s.getInputStream();
            byte[] bytes = new byte[1024];
            int len = ins.read(bytes);
            //将二进制转成字符串
            String text = new String(bytes, 0, len);
            System.out.println(text);
            //释放资源
            s.close();
            ss.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

客户端:

package com.seesun2012.socket;

import java.io.OutputStream;
import java.net.Socket;

/**
 * Socket客户端
 *
 * @author seesun2012@163.com
 *
 */
public class TcpClient {

    public static void main(String[] args) {
        doSocket();
    }

    private static void doSocket(){
        try {
            //与服务器建立连接
            Socket s = new Socket("127.0.0.1", 15421);
            //获取一个输出流
            OutputStream os = s.getOutputStream();
            //向服务器输出流中传入二进制字节流
            os.write("你好,CHINA~!".getBytes());
            //释放资源
            s.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}