一、网络编程[size=16.0000pt](一)网络要素 网络模型:OSI、TCP/IP 网络要素:IP、端口、协议 端口:0~65535、其中0~1024被系统占用 协议:TCP、UDP IP:InetAddress 将IP地址封装成对象 InetAddress ip = InetAddress.getLocalHost(); getHostAddress(); //主机地址 getHostName(); //主机名 域名解析 先到本地找 %System32%/drivers/etc/hosts文件 再到DNS服务器找 [size=16.0000pt](二)UDP 将数据、源、目的封装到数据包中,不需要建立连接 每个数据包限制在64K 速度快、但不可靠协议 //DatagramSocket 数据套接 DatagramSocket ds = new DatagramSocket(10000, InetAddress.getByName("192.168.1.128")); //数据报包 DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.128"),10000); [size=16.0000pt](三)TCP 三次握手建立建立 可以传输大数据 建立连接,可靠但效率稍低 Socket 网络端点 数据在两个Socket间通过IO传输 //客户端 Socket c = new Socket("192.168.1.128",10001); InputStream in = c.getInputStream(); OutputStream out = c.getOutputStream(); c.shutdownInput(); //流的末尾 c.shutdownInput(); //服务端 ServerSocket ss = new ServerSocket(10001); Socket sc = ss.accept(); //获取Socket //练习1,文本转换,小写输入到服务器转换为大写返回给客户端输出 BufferedReader bfr = new BufferedReader(new InputStreamReader(sc.getInputStream())); String line = bfr.readLine(); line = line.toUpperCase(); //转换为大写 PrintWriter pw = new PrintWriter(sc.getOutputStream(),true);//写入并刷新 pw.println(line); /* 练习2,上传文件 1. 客户端读取文件到输入流 Socket 2. 服务器端获取Socket-->获取输出流 3. 将输出流写到服务器 */ /* 练习3,多线程上传图片 * 服务端 * */ ServerSocket iss = new ServerSocket(10002); while(true){ Socket isc = ss.accept(); //启动线程处理 new Thread(new UploadImage(isc)).start(); } [size=16.0000pt](四)客户端和服务端 任何进行网络通信的都有C/S,最常用的是B/S 它们之间在Socket之间传输数据 [size=16.0000pt](五)模拟服务/浏览器//模拟服务器端 public static void servicer() throws IOException{ ServerSocket ss = new ServerSocket(9090); Socket s = ss.accept(); InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String text = new String(buf, 0 ,len); System.out.println(text); //给客户端返回信息 PrintWriter out = new PrintWriter(s.getOutputStream(),true); //true刷出 out.println("欢迎来访问"); s.close(); ss.close(); } //模拟浏览器 public static void browser() throws IOException{ Socket s = new Socket("192.168.1.128",8080); PrintWriter out = new PrintWriter(s.getOutputStream(), true); out.println("GET /myweb/1.html HTTP/1.1"); out.println("Accept:*/*"); out.println("Host:192.168.1.100:8080"); out.println("Connection:close"); out.println(); out.println(); InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String str = new String(buf, 0, len); System.out.println(str); }
|