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());