2、 Socket:两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket、Socket通常用来实现client—server连接、java.net包中定义的两个Socket和ServerSocket,分别用来实现双向连接的client和server端、建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)——TCP端口 UDP端口分开,每一个65536个端口
import java.net.*; import java.io.*; public class TCPClient { public static void main(String[] args) throws Exception { Socket s = new Socket("127.0.0.1", 6666); OutputStream os = s.getOutputStream(); //得到输出管道 DataOutputStream dos = new DataOutputStream(os);//创建数据传输流 Thread.sleep(30000); dos.writeUTF("hello server!");//客户端传输数据 dos.flush(); dos.close(); s.close(); } }
import java.net.*; import java.io.*; public class TCPServer { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(6666);//在6666端口监听,准备连接客户端 while (true) { Socket s = ss.accept(); System.out.println("a client connect!"); DataInputStream dis = new DataInputStream(s.getInputStream());//服务器通过输入管道接收数据流 System.out.println(dis.readUTF());//输出读入的数据 dis.close(); s.close(); } } }
import java.net.*; import java.io.*; public class TestSockClient { public static void main(String[] args) { InputStream is = null; OutputStream os = null; try { Socket socket = new Socket("localhost",5888); is = socket.getInputStream(); //得到输入管道 os = socket.getOutputStream(); //得到输出管道 DataInputStream dis = new DataInputStream(is); //创建输入流 DataOutputStream dos = new DataOutputStream(os); //创建输出流 dos.writeUTF("hey"); //向服务器写 String s = null; if((s=dis.readUTF())!=null); //从服务器读 System.out.println(s); dos.close(); dis.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) {e.printStackTrace();} } }
import java.io.*; import java.net.*; public class TestSockServer { public static void main(String[] args) { InputStream in = null; OutputStream out = null; try { ServerSocket ss = new ServerSocket(5888); Socket socket = ss.accept(); //得到输入管道 in = socket.getInputStream(); out = socket.getOutputStream();//得到输出管道 DataOutputStream dos = new DataOutputStream(out); //创建输出流 DataInputStream dis = new DataInputStream(in); //创建输入流 String s = null; if((s=dis.readUTF())!=null) { //从客户端读入 System.out.println(s); System.out.println("from: "+socket.getInetAddress()); //获取IP System.out.println("Port: "+socket.getPort()); //获取端口 } dos.writeUTF("hi,hello"); //向客户端写 dis.close(); dos.close(); socket.close(); } catch (IOException e) {e.printStackTrace();} } }