2、Socket介绍
Socket可以理解为客户端或服务器端一个特殊的对象,这个对象有两个关键的方法,getInputStream()和getOutputStream()方法;
客户端的Socket对象上的getInputStream()方法得到的输入流其实就是服务器端发回的数据;
客户端的Socket对象上的getOutputStream()方法得到的输出流其实就是将要发送到服务器端的数据;
Socket有两种主要的操作方式:面象连接的和无连接的;
3、Socket程序(java.net.*)
TCP编程
java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的Client和Server;
面象连接的有服务器端和客户端
建立连接时所需的寻址信息为:远程计算机的IP地址和端口号端口号又分TCP和UDP
分别为0-65535(1-1024被系统占用);
服务器端程序:
ServerSocket ss = new ServerSocket(6666);//已经在6666端口建立了监听;
while(true){
Socket s = ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());//阻塞式的
dis.close();
s.close();
客户端程序:
Socket s = new Socket("localhost",6666);
OutputStream os = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("Hello Server");
dos.flush();
dos.close();
s.close();
UDP编程:
服务器端:
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
DatagramSocket ds = new DatagramSocket(5555);
while (true){
ds.receive(dp);
System.out.println(new String(buf,0,dp.getLength()));
}
客户端:
byte[] buf = (new String("hello")).getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1",5555));
DatagramSocket ds = new DatagramSocket(9999);
ds.send(dp);
ds.close();