Socket

一、TCP

  • 服务器实例化一个ServerSocket对象,表示通过服务器上的端口通信。
  • 服务器调用 ServerSocket类 的accept()方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。
  • 服务器正在等待时,一个客户端实例化一个Socket对象,指定服务器名称和端口号来请求连接。
  • Socket类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个Socket对象能够与服务器进行通信。
  • 在服务器端,accept()方法返回服务器上一个新的socket引用,该socket连接到客户端的socket。

Example:

Server:

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class JavaNet_SocketSever {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
            ServerSocket ss=new ServerSocket(10003);
            Socket s=ss.accept();
            InputStream in=s.getInputStream();
            byte[] bt=new byte[1024];
            int len=in.read(bt);
            System.out.println(new String(bt,0,len));
            s.close();
            ss.close();
            }
}

Client:

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class JavaNet_SocketClient {
    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws  IOException {
        // TODO Auto-generated method stub
        Socket s =new Socket("255.255.255.255", 10003);
        OutputStream out=s.getOutputStream();
        out.write("hello".getBytes());
        s.close();
    }
}

 扩展:

java.io下面有两个抽象类:InputStream和Reader
InputStream是表示字节输入流的所有类的超类
Reader是用于读取字符流的抽象类
InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。
即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。

So:

        OutputStream out=s.getOutputStream();
        out.write("hello".getBytes());    
原文地址:https://www.cnblogs.com/weiwoduhigh/p/3557307.html